dmidecode-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 1/2] Consistently use read_file() when reading from a dump fi


From: Jerry Hoemann
Subject: Re: [PATCH 1/2] Consistently use read_file() when reading from a dump file
Date: Wed, 19 Apr 2023 17:01:56 -0600
User-agent: Mutt/1.10.1 (2018-07-13)

On Tue, Apr 18, 2023 at 04:56:31PM +0200, Jean Delvare wrote:
> Use read_file() instead of mem_chunk() to read the entry point from a
> dump file. This is faster, and consistent with how we then read the
> actual DMI table from that dump file.
> 
> This made no functional difference so far, which is why it went
> unnoticed for years. But now that a file type check was added to the
> mem_chunk() function, we must stop using it to read from regular
> files.
> 
> In practice, this will again allow root to use the --from-dump
> option. I'm not too concerned about this temporary breakage though, as
> there is no legitimate use case. Option --from-dump is precisely
> meant to separate table fetching (which does require root and local
> access) from decoding (which doesn't), so root should never use it.
> 

Tested-by: Jerry Hoemann <jerry.hoemann@hpe.com>


> Signed-off-by: Jean Delvare <jdelvare@suse.de>
> ---
>  dmidecode.c |   11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> --- dmidecode.orig/dmidecode.c
> +++ dmidecode/dmidecode.c
> @@ -6025,17 +6025,25 @@ int main(int argc, char * const argv[])
>               pr_comment("dmidecode %s", VERSION);
>  
>       /* Read from dump if so instructed */
> +     size = 0x20;
>       if (opt.flags & FLAG_FROM_DUMP)
>       {
>               if (!(opt.flags & FLAG_QUIET))
>                       pr_info("Reading SMBIOS/DMI data from file %s.",
>                               opt.dumpfile);
> -             if ((buf = mem_chunk(0, 0x20, opt.dumpfile)) == NULL)
> +             if ((buf = read_file(0, &size, opt.dumpfile)) == NULL)
>               {
>                       ret = 1;
>                       goto exit_free;
>               }
>  
> +             /* Truncated entry point can't be processed */
> +             if (size < 0x20)
> +             {
> +                     ret = 1;
> +                     goto done;
> +             }
> +
>               if (memcmp(buf, "_SM3_", 5) == 0)
>               {
>                       if (smbios3_decode(buf, opt.dumpfile, 0))
> @@ -6059,7 +6067,6 @@ int main(int argc, char * const argv[])
>        * contain one of several types of entry points, so read enough for
>        * the largest one, then determine what type it contains.
>        */
> -     size = 0x20;
>       if (!(opt.flags & FLAG_NO_SYSFS)
>        && (buf = read_file(0, &size, SYS_ENTRY_FILE)) != NULL)
>       {
> 
> 
> -- 
> Jean Delvare
> SUSE L3 Support

-- 

-----------------------------------------------------------------------------
Jerry Hoemann                  Software Engineer   Hewlett Packard Enterprise
-----------------------------------------------------------------------------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]