[Bug 1835452] Review Request: mlxbf-bootctl - Bootloader control for Mellanox BlueField

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

 



https://bugzilla.redhat.com/show_bug.cgi?id=1835452

Spencer Lingard <spencer@xxxxxxxxxxxx> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
              Flags|needinfo?(spencer@mellanox. |
                   |com)                        |



--- Comment #6 from Spencer Lingard <spencer@xxxxxxxxxxxx> ---

Spec URL:
https://download.copr.fedorainfracloud.org/results/slingard/mlxbf-bootctl/fedora-rawhide-aarch64/01476093-mlxbf-bootctl/mlxbf-bootctl.spec
SRPM URL:
https://download.copr.fedorainfracloud.org/results/slingard/mlxbf-bootctl/fedora-rawhide-aarch64/01476093-mlxbf-bootctl/mlxbf-bootctl-1.1-5.fc33.src.rpm
Scratch Koji URL: https://koji.fedoraproject.org/koji/taskinfo?taskID=45835273

New version for review.

(In reply to Honggang LI from comment #2)
>      1	Name: mlxbf-bootctl
>      2	Version: 1.1
>      3	%{!?_release: %define _release 4}
>      4	Release: %{_release}%{?dist}
> Please delete line 3, and replace "%{_release}" with 4 for line 4.

Done.

>      
>      5	Summary: Mellanox BlueField boot partition management utility
>      6	
>      7	License: BSD
>      8	Url: https://github.com/Mellanox/mlxbf-bootctl
>      9	Source: mlxbf-bootctl-1.1.tar.gz
>     10	
>     11	ExclusiveArch: aarch64
> 
> Need a comment for "ExclusiveArch", see
> https://fedoraproject.org/wiki/Packaging:ReviewGuidelines

Done.

>     
>     12	
>     13	BuildRequires: binutils
>     14	BuildRequires: gcc
> 
> line 13 should be deleted, as gcc requires binutils.
> 
> $ rpm -qR gcc | grep binutils
> binutils >= 2.31

Done.

>     
>     15	
>     16	%description
>     17	Access to all the boot partition management is via a program shipped
>     18	with the BlueField software called "mlxbf-bootctl".
> 
> I have no idea what is main function or feature of this package after read
> this
> '%description' section. Please improve it.

Done.

> 
>     19	
>     20	%prep
>     21	%setup -q -n mlxbf-bootctl-1.1
> 
> "%setup -q" should be enough, in case
> 1) top directory name was in format "%{name}-%{version}/"
> 2) tarball name was in format "%{name}-%{version}.XXX"

This spec file is generated by rpkg
(https://github.com/Mellanox/mlxbf-bootctl/blob/master/mlxbf-bootctl.spec.rpkg).
As far as I can tell, I can't change the way rpkg generates the %setup macro.

> 
>     22	
>     23	%build
>     24	%make_build
>     25	
>     26	%install
>     27	%make_install
>     28	%{__install} -d %{buildroot}%{_mandir}/man8
>     29	%{__install} -m 0644 mlxbf-bootctl.8 %{buildroot}%{_mandir}/man8
>     30	
>     31	%files
>     32	%defattr(-, root, root)
> line 32 is unnecessary, please remove it.

Done.

> 
>     33	/sbin/*
> should install programs in %{_sbindir}, and use %{_sbindir}/XXX, XXX is the
> program name.

Done.

> 
>     34	%{_mandir}/man8/mlxbf-bootctl.8.gz
>     35	
>     36	%license LICENSE
>     37	%doc mlxbf-bootctl.txt
>     38	
>     39	%changelog
>     40	* Wed Jun 10 2020 Spencer Lingard <spencer@xxxxxxxxxxxx> 1.1-4
>     41	(none)
>     42	
>     43	* Tue May 12 2020 Spencer Lingard <spencer@xxxxxxxxxxxx> 1.1-3
>     44	(none)
> 
>     line 41  and 44 are unnecessary, should be deleted.

Changed them to be more detailed.


(In reply to Honggang LI from comment #3)
> Task URL: https://cov01.lab.eng.brq.redhat.com/covscanhub/task/175416/
> Comment: None
> 
> 
> All defects
> 
> CHECKED_RETURN            1
> CLANG_WARNING             1
> CPPCHECK_WARNING          1
> 
> ==========================================================================
> mlxbf-bootctl-1.1-4.fc31
> List of Defects
> 
> Error: CPPCHECK_WARNING (CWE-664): [#def1]
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:60: error[va_end_missing]: va_list 'ap'
> was opened but not closed by va_end().
> #   58|     putc('\n', stderr);
> #   59|     exit(1);
> #   60|-> }
> #   61|   
> #   62|   #ifndef OUTPUT_ONLY

Fixed.

> 
> Error: CLANG_WARNING: [#def2]
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:545:5: warning: Null pointer passed to 1st
> parameter expecting 'nonnull'
> #    memset(buf + seg_size, 0, pad_size);
> #    ^

This is a false positive. The tool assumes that (buf == NULL) at line 524, but
if buf == NULL, the program will die with an error message rather than
continuing. See the note below.

> mlxbf-bootctl-1.1/mlxbf-bootctl.c:644:10: note: Assuming the condition is
> true
> #  while ((opt = getopt_long(argc, argv, short_options, long_options, NULL))
> #         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:644:3: note: Loop condition is true. 
> Entering loop body
> #  while ((opt = getopt_long(argc, argv, short_options, long_options, NULL))
> #  ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:647:5: note: Control jumps to 'case 98:' 
> at line 663
> #    switch (opt)
> #    ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:665:7: note:  Execution continues on line
> 644
> #      break;
> #      ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:644:10: note: Assuming the condition is
> false
> #  while ((opt = getopt_long(argc, argv, short_options, long_options, NULL))
> #         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:644:3: note: Loop condition is false.
> Execution continues on line 694
> #  while ((opt = getopt_long(argc, argv, short_options, long_options, NULL))
> #  ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:694:7: note: Assuming 'bootstream' is
> non-null
> #  if (!bootstream && !swap && watchdog_swap == NULL && !watchdog_disable)
> #      ^~~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:694:19: note: Left side of '&&' is false
> #  if (!bootstream && !swap && watchdog_swap == NULL && !watchdog_disable)
> #                  ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:700:7: note: 'bootstream' is non-null
> #  if (bootstream)
> #      ^~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:700:3: note: Taking true branch
> #  if (bootstream)
> #  ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:702:9: note: 'input_file' is null
> #    if (input_file)
> #        ^~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:702:5: note: Taking false branch
> #    if (input_file)
> #    ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:707:14: note: 'output_file' is null
> #    else if (output_file)
> #             ^~~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:707:10: note: Taking false branch
> #    else if (output_file)
> #         ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:718:11: note: Assuming 'boot_part_size' is
> >= field 'st_size'
> #      if (st.st_size > boot_part_size)
> #          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:718:7: note: Taking false branch
> #      if (st.st_size > boot_part_size)
> #      ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:725:11: note: Assuming the condition is
> false
> #      if (asprintf(&bootfile, "%sboot%d", mmc_path, boot_part ^ which_boot)
> <= 0)
> #         
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:725:7: note: Taking false branch
> #      if (asprintf(&bootfile, "%sboot%d", mmc_path, boot_part ^ which_boot)
> <= 0)
> #      ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:728:7: note: Calling 'write_bootstream'
> #      write_bootstream(bootstream, bootfile, O_SYNC);
> #      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:475:3: note: Taking true branch
> #  if (strncmp(bootfile, "/dev/", 5) == 0)
> #  ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:477:9: note: Assuming the condition is
> false
> #    if (asprintf(&sysname, "/sys/block/%s/force_ro", &bootfile[5]) <= 0)
> #        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:477:5: note: Taking false branch
> #    if (asprintf(&sysname, "/sys/block/%s/force_ro", &bootfile[5]) <= 0)
> #    ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:481:9: note: Assuming 'sysfd' is < 0
> #    if (sysfd >= 0)
> #        ^~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:481:5: note: Taking false branch
> #    if (sysfd >= 0)
> #    ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:503:11: note: Assuming the condition is
> false
> #      if (errno != ENOENT)
> #          ^~~~~~~~~~~~~~~
> /usr/include/errno.h:38:16: note: expanded from macro 'errno'
> ## define errno (*__errno_location ())
> #               ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:503:7: note: Taking false branch
> #      if (errno != ENOENT)
> #      ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:513:7: note: Assuming 'ifd' is < 0
> #  if (ifd < 0)
> #      ^~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:513:3: note: Taking true branch
> #  if (ifd < 0)
> #  ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:516:7: note: Assuming 'ofd' is >= 0
> #  if (ofd < 0)
> #      ^~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:516:3: note: Taking false branch
> #  if (ofd < 0)
> #  ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:519:7: note: Assuming the condition is
> false
> #  if (fstat(ifd, &st) < 0)
> #      ^~~~~~~~~~~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:519:3: note: Taking false branch
> #  if (fstat(ifd, &st) < 0)
> #  ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:523:3: note: 'buf' initialized here
> #  char *buf = malloc(MAX_SEG_LEN);
> #  ^~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:524:7: note: Assuming 'buf' is equal to
> NULL
> #  if (buf == NULL)
> #      ^~~~~~~~~~~

Note: if buf == NULL here, the true branch will stop the program, and a NULL
pointer will not be passed to memset.

> mlxbf-bootctl-1.1/mlxbf-bootctl.c:524:3: note: Taking true branch
> #  if (buf == NULL)
> #  ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:532:10: note: Assuming 'bytes_left' is > 0
> #  while (bytes_left > 0)
> #         ^~~~~~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:532:3: note: Loop condition is true. 
> Entering loop body
> #  while (bytes_left > 0)
> #  ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:534:24: note: Assuming the condition is
> false
> #    size_t seg_size = (bytes_left <= MAX_SEG_LEN) ? bytes_left :
> MAX_SEG_LEN;
> #                       ^~~~~~~~~~~~~~~~~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:534:23: note: '?' condition is false
> #    size_t seg_size = (bytes_left <= MAX_SEG_LEN) ? bytes_left :
> MAX_SEG_LEN;
> #                      ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:538:23: note: '?' condition is false
> #    size_t pad_size = seg_size % 8 ? (8 - seg_size % 8) : 0;
> #                      ^
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:539:41: note: 'bytes_left' is not equal to
> 0
> #    uint64_t segheader = gen_seg_header(bytes_left == 0, 1, BOOT_FIFO_ADDR,
> #                                        ^~~~~~~~~~
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:545:5: note: Null pointer passed to 1st
> parameter expecting 'nonnull'
> #    memset(buf + seg_size, 0, pad_size);
> #    ^      ~~~~~~~~~~~~~~
> #  543|       // Copy the segment plus any padding.
> #  544|       read_or_die(bootstream, ifd, buf, seg_size);
> #  545|->     memset(buf + seg_size, 0, pad_size);
> #  546|       write_or_die(bootfile, ofd, buf, seg_size + pad_size);
> #  547|     }
> 
> Error: CHECKED_RETURN (CWE-252): [#def3]
> mlxbf-bootctl-1.1/mlxbf-bootctl.c:717: check_return: Calling
> "stat(bootstream, &st)" without checking return value. This library function
> may fail and return an error code. [Note: The source code implementation of
> the function has been overridden by a builtin model.]
> #  715|         uint64_t boot_part_size = get_boot_partition_size();
> #  716|         struct stat st;
> #  717|->       stat(bootstream, &st);
> #  718|         if (st.st_size > boot_part_size)
> #  719|           die("Size of bootstream exceeds boot partition size");

Fixed.


-- 
You are receiving this mail because:
You are on the CC list for the bug.
You are always notified about changes to this product and component
_______________________________________________
package-review mailing list -- package-review@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to package-review-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/package-review@xxxxxxxxxxxxxxxxxxxxxxx




[Index of Archives]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite Conditions]     [KDE Users]

  Powered by Linux