Hey all, Good news, Coverity Scan resumed putting information in the email report. Bad news, 20 new issues now that next has been merged.
---------- Forwarded message --------- From: <scan-ad...@coverity.com> Date: Mon, Jul 7, 2025 at 5:39 PM Subject: New Defects reported by Coverity Scan for Das U-Boot To: <tom.r...@gmail.com> Hi, Please find the latest report on new defect(s) introduced to *Das U-Boot* found with Coverity Scan. - *New Defects Found:* 20 - 6 defect(s), reported by Coverity Scan earlier, were marked fixed in the recent build analyzed by Coverity Scan. - *Defects Shown:* Showing 20 of 20 defect(s) Defect Details ** CID 569500: Incorrect expression (UNUSED_VALUE) /boot/bootflow_menu.c: 158 in bootflow_menu_add() _____________________________________________________________________________________________ *** CID 569500: Incorrect expression (UNUSED_VALUE) /boot/bootflow_menu.c: 158 in bootflow_menu_add() 152 153 if (!label) { 154 free(key); 155 return log_msg_ret("nam", -ENOMEM); 156 } 157 >>> CID 569500: Incorrect expression (UNUSED_VALUE) >>> Assigning value from "priv->last_bootdev != bflow->dev" to "add_gap" >>> here, but that stored value is overwritten before it can be used. 158 add_gap = priv->last_bootdev != bflow->dev; 159 160 /* disable this gap for now, since it looks a little ugly */ 161 add_gap = false; 162 priv->last_bootdev = bflow->dev; 163 ** CID 569499: Null pointer dereferences (NULL_RETURNS) /lib/efi_loader/efi_memory.c: 719 in efi_realloc() _____________________________________________________________________________________________ *** CID 569499: Null pointer dereferences (NULL_RETURNS) /lib/efi_loader/efi_memory.c: 719 in efi_realloc() 713 old_size = alloc->num_pages * EFI_PAGE_SIZE - 714 sizeof(struct efi_pool_allocation); 715 716 new_ptr = efi_alloc(size); 717 718 /* copy old data to new alloced buffer */ >>> CID 569499: Null pointer dereferences (NULL_RETURNS) >>> Dereferencing a pointer that might be "NULL" "new_ptr" when calling >>> "memcpy". [Note: The source code implementation of the function has been >>> overridden by a builtin model.] 719 memcpy(new_ptr, *ptr, min(size, old_size)); 720 721 /* free the old buffer */ 722 efi_free_pool(*ptr); 723 724 *ptr = new_ptr; ** CID 569498: Code maintainability issues (SIZEOF_MISMATCH) /lib/efi_loader/efi_debug_support.c: 163 in efi_core_remove_debug_image_info_entry() _____________________________________________________________________________________________ *** CID 569498: Code maintainability issues (SIZEOF_MISMATCH) /lib/efi_loader/efi_debug_support.c: 163 in efi_core_remove_debug_image_info_entry() 157 table[index].normal_image->image_handle == image_handle) { 158 /* Found a match. Free up the table entry. 159 * Move the tail of the table one slot to the front. 160 */ 161 efi_free_pool(table[index].normal_image); 162 >>> CID 569498: Code maintainability issues (SIZEOF_MISMATCH) >>> Passing argument "&table[index]" of type "union efi_debug_image_info *" >>> and argument "(efi_m_debug_info_table_header.table_size - index - 1) * 8UL >>> /* sizeof (union efi_debug_image_info *) */" to function "memmove" is >>> suspicious. In this case, "sizeof (union efi_debug_image_info *)" is equal >>> to "sizeof (union efi_debug_image_info)", but this is not a portable >>> assumption. 163 memmove(&table[index], 164 &table[index + 1], 165 (efi_m_debug_info_table_header.table_size - 166 index - 1) * EFI_DEBUG_TABLE_ENTRY_SIZE); 167 168 /* Decrease the number of EFI_DEBUG_IMAGE_INFO ** CID 569497: Null pointer dereferences (FORWARD_NULL) /lib/efi_selftest/efi_selftest_esrt.c: 73 in efi_test_fmp_get_image_info() _____________________________________________________________________________________________ *** CID 569497: Null pointer dereferences (FORWARD_NULL) /lib/efi_selftest/efi_selftest_esrt.c: 73 in efi_test_fmp_get_image_info() 67 if (package_version) 68 *package_version = 0xffffffff; 69 if (package_version_name) 70 *package_version_name = NULL; 71 72 if (*image_info_size < sizeof(*image_info)) { >>> CID 569497: Null pointer dereferences (FORWARD_NULL) >>> Dereferencing null pointer "descriptor_count". 73 *image_info_size = *descriptor_size * *descriptor_count; 74 return EFI_BUFFER_TOO_SMALL; 75 } 76 77 for (int idx = 0; idx < TEST_ESRT_NUM_ENTRIES; idx++) 78 image_info[idx] = static_img_info[idx]; ** CID 569496: Integer handling issues (INTEGER_OVERFLOW) /drivers/usb/emul/sandbox_hub.c: 298 in sandbox_child_post_bind() _____________________________________________________________________________________________ *** CID 569496: Integer handling issues (INTEGER_OVERFLOW) /drivers/usb/emul/sandbox_hub.c: 298 in sandbox_child_post_bind() 292 static int sandbox_child_post_bind(struct udevice *dev) 293 { 294 struct sandbox_hub_plat *plat = dev_get_parent_plat(dev); 295 struct usb_emul_plat *emul = dev_get_uclass_plat(dev); 296 297 plat->port = dev_read_u32_default(dev, "reg", -1); >>> CID 569496: Integer handling issues (INTEGER_OVERFLOW) >>> Expression "plat->port + 1", where "plat->port" is known to be equal to >>> -1, overflows the type of "plat->port + 1", which is type "int". 298 emul->port1 = plat->port + 1; 299 300 return 0; 301 } 302 303 static const struct dm_usb_ops sandbox_usb_hub_ops = { ** CID 569495: Integer handling issues (NEGATIVE_RETURNS) _____________________________________________________________________________________________ *** CID 569495: Integer handling issues (NEGATIVE_RETURNS) /tools/fit_image.c: 921 in fit_handle_file() 915 do { 916 if (copyfile(bakfile, tmpfile) < 0) { 917 printf("Can't copy %s to %s\n", bakfile, tmpfile); 918 ret = -EIO; 919 break; 920 } >>> CID 569495: Integer handling issues (NEGATIVE_RETURNS) >>> "size_inc" is passed to a parameter that cannot be negative. 921 ret = fit_add_file_data(params, size_inc, tmpfile); 922 if (!ret || ret != -ENOSPC) 923 break; 924 size_inc += 1024; 925 } while (size_inc < 64 * 1024); 926 ** CID 569494: Control flow issues (DEADCODE) /lib/efi_selftest/efi_selftest_config_table.c: 129 in execute() _____________________________________________________________________________________________ *** CID 569494: Control flow issues (DEADCODE) /lib/efi_selftest/efi_selftest_config_table.c: 129 in execute() 123 return EFI_ST_FAILURE; 124 } 125 if (counter != 1) { 126 efi_st_error("Notification function was not called.\n"); 127 return EFI_ST_FAILURE; 128 } >>> CID 569494: Control flow issues (DEADCODE) >>> Execution cannot reach this statement: "if (table_count != sys_tabl...". 129 if (table_count != sys_table->nr_tables) { 130 efi_st_error("Incorrect table count %u, expected %u\n", 131 (unsigned int)sys_table->nr_tables, 132 (unsigned int)table_count); 133 return EFI_ST_FAILURE; 134 } ** CID 569493: Insecure data handling (TAINTED_SCALAR) _____________________________________________________________________________________________ *** CID 569493: Insecure data handling (TAINTED_SCALAR) /lib/efi_selftest/efi_selftest_esrt.c: 276 in execute() 270 efi_st_error("ESRT mismatch in new entry count (%d), expected (%d).\n", 271 entry_delta, TEST_ESRT_NUM_ENTRIES); 272 return EFI_ST_FAILURE; 273 } 274 275 for (u32 idx = 0; idx < TEST_ESRT_NUM_ENTRIES; idx++) >>> CID 569493: Insecure data handling (TAINTED_SCALAR) >>> Passing tainted expression "esrt->fw_resource_count" to >>> "lib_test_check_uuid_entry", which uses it as a loop boundary. 276 if (!lib_test_check_uuid_entry(esrt, &static_img_info[idx])) { 277 efi_st_error("ESRT entry mismatch\n"); 278 return EFI_ST_FAILURE; 279 } 280 281 return EFI_ST_SUCCESS; ** CID 569492: (DC.WEAK_CRYPTO) /net/bootp.c: 442 in bootp_timeout_handler() /net/bootp.c: 441 in bootp_timeout_handler() _____________________________________________________________________________________________ *** CID 569492: (DC.WEAK_CRYPTO) /net/bootp.c: 442 in bootp_timeout_handler() 436 bootp_timeout = retransmit_period_max_ms; 437 438 /* Randomize by adding bootp_timeout*RAND, where RAND 439 * is a randomization factor between -0.1..+0.1 440 */ 441 srand(get_ticks() + rand()); >>> CID 569492: (DC.WEAK_CRYPTO) >>> "rand" should not be used for security-related applications, because >>> linear congruential algorithms are too easy to break. 442 rand_minus_plus_100 = ((rand() % 200) - 100); 443 bootp_timeout = bootp_timeout + 444 (((int)bootp_timeout * rand_minus_plus_100) / 1000); 445 446 net_set_timeout_handler(bootp_timeout, bootp_timeout_handler); 447 bootp_request(); /net/bootp.c: 441 in bootp_timeout_handler() 435 if (bootp_timeout > retransmit_period_max_ms) 436 bootp_timeout = retransmit_period_max_ms; 437 438 /* Randomize by adding bootp_timeout*RAND, where RAND 439 * is a randomization factor between -0.1..+0.1 440 */ >>> CID 569492: (DC.WEAK_CRYPTO) >>> "rand" should not be used for security-related applications, because >>> linear congruential algorithms are too easy to break. 441 srand(get_ticks() + rand()); 442 rand_minus_plus_100 = ((rand() % 200) - 100); 443 bootp_timeout = bootp_timeout + 444 (((int)bootp_timeout * rand_minus_plus_100) / 1000); 445 446 net_set_timeout_handler(bootp_timeout, bootp_timeout_handler); ** CID 569491: Error handling issues (NEGATIVE_RETURNS) /tools/file2include.c: 56 in main() _____________________________________________________________________________________________ *** CID 569491: Error handling issues (NEGATIVE_RETURNS) /tools/file2include.c: 56 in main() 50 if (!count) { 51 fprintf(stderr, "File %s has length 0\n", argv[1]); 52 return EXIT_FAILURE; 53 } 54 rewind(file); 55 /* Read file */ >>> CID 569491: Error handling issues (NEGATIVE_RETURNS) >>> "count" is passed to a parameter that cannot be negative. 56 buf = malloc(count); 57 if (!buf) { 58 perror("calloc"); 59 return EXIT_FAILURE; 60 } 61 count = fread(buf, 1, count, file); ** CID 569490: Null pointer dereferences (FORWARD_NULL) /lib/efi_selftest/efi_selftest_esrt.c: 73 in efi_test_fmp_get_image_info() _____________________________________________________________________________________________ *** CID 569490: Null pointer dereferences (FORWARD_NULL) /lib/efi_selftest/efi_selftest_esrt.c: 73 in efi_test_fmp_get_image_info() 67 if (package_version) 68 *package_version = 0xffffffff; 69 if (package_version_name) 70 *package_version_name = NULL; 71 72 if (*image_info_size < sizeof(*image_info)) { >>> CID 569490: Null pointer dereferences (FORWARD_NULL) >>> Dereferencing null pointer "descriptor_size". 73 *image_info_size = *descriptor_size * *descriptor_count; 74 return EFI_BUFFER_TOO_SMALL; 75 } 76 77 for (int idx = 0; idx < TEST_ESRT_NUM_ENTRIES; idx++) 78 image_info[idx] = static_img_info[idx]; ** CID 569489: Integer handling issues (INTEGER_OVERFLOW) /lib/efi_selftest/efi_selftest_bitblt.c: 83 in notify() _____________________________________________________________________________________________ *** CID 569489: Integer handling issues (INTEGER_OVERFLOW) /lib/efi_selftest/efi_selftest_bitblt.c: 83 in notify() 77 /* Increment position */ 78 pos->x += 5; 79 if (pos->x >= WIDTH + gop->mode->info->width) 80 pos->x = 0; 81 82 width = WIDTH; >>> CID 569489: Integer handling issues (INTEGER_OVERFLOW) >>> Expression "pos->x - 200UL", where "pos->x" is known to be equal to 0, >>> underflows the type of "pos->x - 200UL", which is type "unsigned long". 83 dx = pos->x - WIDTH; 84 sx = 0; 85 if (pos->x >= gop->mode->info->width) { 86 width = WIDTH + gop->mode->info->width - pos->x; 87 } else if (pos->x < WIDTH) { 88 dx = 0; ** CID 569488: Control flow issues (NO_EFFECT) /tools/fit_image.c: 913 in fit_handle_file() _____________________________________________________________________________________________ *** CID 569488: Control flow issues (NO_EFFECT) /tools/fit_image.c: 913 in fit_handle_file() 907 * signatures. We do an attempt at estimating the expected 908 * extra size, but just in case that is not sufficient, keep 909 * trying adding 1K, with a reasonable upper bound of 64K 910 * total, until we succeed. 911 */ 912 size_inc = fit_estimate_hash_sig_size(params, bakfile); >>> CID 569488: Control flow issues (NO_EFFECT) >>> This less-than-zero comparison of an unsigned value is never true. >>> "size_inc < 0UL". 913 if (size_inc < 0) 914 goto err_system; 915 do { 916 if (copyfile(bakfile, tmpfile) < 0) { 917 printf("Can't copy %s to %s\n", bakfile, tmpfile); 918 ret = -EIO; ** CID 569487: Insecure data handling (TAINTED_SCALAR) _____________________________________________________________________________________________ *** CID 569487: Insecure data handling (TAINTED_SCALAR) /boot/cedit.c: 474 in cedit_write_settings() 468 } 469 470 ret = fdt_end_node(fdt); 471 if (!ret) 472 ret = fdt_end_node(fdt); 473 if (!ret) >>> CID 569487: Insecure data handling (TAINTED_SCALAR) >>> Passing tainted expression "fdt->size_dt_strings" to "fdt_finish", >>> which uses it as an offset. 474 ret = fdt_finish(fdt); 475 if (ret) { 476 log_debug("Failed to finish FDT (err=%d)\n", ret); 477 return log_msg_ret("fin", -EINVAL); 478 } 479 ** CID 569486: Incorrect expression (SIZEOF_MISMATCH) /lib/efi_selftest/efi_selftest_console.c: 242 in efi_st_printc() _____________________________________________________________________________________________ *** CID 569486: Incorrect expression (SIZEOF_MISMATCH) /lib/efi_selftest/efi_selftest_console.c: 242 in efi_st_printc() 236 break; 237 case 'U': 238 print_uuid(va_arg(args, void*), &pos); 239 break; 240 default: 241 --c; >>> CID 569486: Incorrect expression (SIZEOF_MISMATCH) >>> Passing argument "va_arg (args, void *)" of type "void *" and argument >>> "16 /* 2 * sizeof (void *) */" to function "printx" is suspicious. 242 printx((uintptr_t)va_arg(args, void *), 243 2 * sizeof(void *), &pos); 244 break; 245 } 246 break; 247 case 's': ** CID 569485: (DC.WEAK_CRYPTO) /net/bootp.c: 837 in bootp_request() /net/bootp.c: 838 in bootp_request() _____________________________________________________________________________________________ *** CID 569485: (DC.WEAK_CRYPTO) /net/bootp.c: 837 in bootp_request() 831 extlen = bootp_extended((u8 *)bp->bp_vend); 832 #endif 833 834 /* Only generate a new transaction ID for each new BOOTP request */ 835 if (bootp_try == 1) { 836 if (IS_ENABLED(CONFIG_BOOTP_RANDOM_XID)) { >>> CID 569485: (DC.WEAK_CRYPTO) >>> "rand" should not be used for security-related applications, because >>> linear congruential algorithms are too easy to break. 837 srand(get_ticks() + rand()); 838 bootp_id = rand(); 839 } else { 840 /* 841 * Bootp ID is the lower 4 bytes of our ethernet address 842 * plus the current time in ms. /net/bootp.c: 838 in bootp_request() 832 #endif 833 834 /* Only generate a new transaction ID for each new BOOTP request */ 835 if (bootp_try == 1) { 836 if (IS_ENABLED(CONFIG_BOOTP_RANDOM_XID)) { 837 srand(get_ticks() + rand()); >>> CID 569485: (DC.WEAK_CRYPTO) >>> "rand" should not be used for security-related applications, because >>> linear congruential algorithms are too easy to break. 838 bootp_id = rand(); 839 } else { 840 /* 841 * Bootp ID is the lower 4 bytes of our ethernet address 842 * plus the current time in ms. 843 */ ** CID 569484: Insecure data handling (INTEGER_OVERFLOW) /drivers/core/uclass.c: 339 in uclass_find_next_free_seq() _____________________________________________________________________________________________ *** CID 569484: Insecure data handling (INTEGER_OVERFLOW) /drivers/core/uclass.c: 339 in uclass_find_next_free_seq() 333 } 334 /* 335 * At this point, max will be -1 if there are no existing aliases or 336 * devices 337 */ 338 >>> CID 569484: Insecure data handling (INTEGER_OVERFLOW) >>> "max + 1", which might have overflowed, is returned from the function. 339 return max + 1; 340 } 341 342 int uclass_find_device_by_seq(enum uclass_id id, int seq, struct udevice **devp) 343 { 344 struct uclass *uc; ** CID 569483: Control flow issues (DEADCODE) /boot/bootflow_menu.c: 178 in bootflow_menu_add() _____________________________________________________________________________________________ *** CID 569483: Control flow issues (DEADCODE) /boot/bootflow_menu.c: 178 in bootflow_menu_add() 172 preview_id = 0; 173 if (bflow->logo) { 174 preview_id = ITEM_PREVIEW + seq; 175 ret |= scene_img(scn, "preview", preview_id, 176 bflow->logo, NULL); 177 } >>> CID 569483: Control flow issues (DEADCODE) >>> Execution cannot reach the expression "SCENEMIF_GAP_BEFORE" inside this >>> statement: "ret |= scene_menuitem(scn, ...". 178 ret |= scene_menuitem(scn, OBJ_MENU, "item", ITEM + seq, 179 ITEM_KEY + seq, ITEM_LABEL + seq, 180 ITEM_DESC + seq, preview_id, 181 add_gap ? SCENEMIF_GAP_BEFORE : 0, 182 NULL); 183 ** CID 569482: Control flow issues (DEADCODE) /tools/fit_image.c: 914 in fit_handle_file() _____________________________________________________________________________________________ *** CID 569482: Control flow issues (DEADCODE) /tools/fit_image.c: 914 in fit_handle_file() 908 * extra size, but just in case that is not sufficient, keep 909 * trying adding 1K, with a reasonable upper bound of 64K 910 * total, until we succeed. 911 */ 912 size_inc = fit_estimate_hash_sig_size(params, bakfile); 913 if (size_inc < 0) >>> CID 569482: Control flow issues (DEADCODE) >>> Execution cannot reach this statement: "goto err_system;". 914 goto err_system; 915 do { 916 if (copyfile(bakfile, tmpfile) < 0) { 917 printf("Can't copy %s to %s\n", bakfile, tmpfile); 918 ret = -EIO; 919 break; ** CID 569481: Control flow issues (MISSING_BREAK) /lib/lmb.c: 763 in lmb_alloc_mem() _____________________________________________________________________________________________ *** CID 569481: Control flow issues (MISSING_BREAK) /lib/lmb.c: 763 in lmb_alloc_mem() 757 return 0; 758 759 if (!addr) 760 return -EINVAL; 761 762 switch (type) { >>> CID 569481: Control flow issues (MISSING_BREAK) >>> The case for value "LMB_MEM_ALLOC_ANY" is not terminated by a "break" >>> statement. 763 case LMB_MEM_ALLOC_ANY: 764 *addr = LMB_ALLOC_ANYWHERE; 765 case LMB_MEM_ALLOC_MAX: 766 ret = _lmb_alloc_base(size, align, addr, flags); 767 break; 768 case LMB_MEM_ALLOC_ADDR: View Defects in Coverity Scan <https://scan.coverity.com/projects/das-u-boot?tab=overview> Best regards, The Coverity Scan Admin Team ----- End forwarded message ----- -- Tom
signature.asc
Description: PGP signature