All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Edmond <seanedmond@linux.microsoft.com>
To: Tom Rini <trini@konsulko.com>, u-boot@lists.denx.de
Cc: Sean Edmond <seanedmond@microsoft.com>
Subject: Re: Fwd: New Defects reported by Coverity Scan for Das U-Boot
Date: Thu, 18 May 2023 14:04:37 -0700	[thread overview]
Message-ID: <8ed48347-1e66-0f4f-3c7c-28e7b56bd3e4@linux.microsoft.com> (raw)
In-Reply-To: <20230508202020.GI2398826@bill-the-cat>


On 2023-05-08 1:20 p.m., Tom Rini wrote:
> Here's the latest defect report:
>
> ---------- Forwarded message ---------
> From: <scan-admin@coverity.com>
> Date: Mon, May 8, 2023, 2:29 PM
> Subject: New Defects reported by Coverity Scan for Das U-Boot
> To: <tom.rini@gmail.com>
>
>
> Hi,
>
> Please find the latest report on new defect(s) introduced to Das U-Boot
> found with Coverity Scan.
>
> 5 new defect(s) introduced to Das U-Boot found with Coverity Scan.
> 1 defect(s), reported by Coverity Scan earlier, were marked fixed in the
> recent build analyzed by Coverity Scan.
>
> New defect(s) Reported-by: Coverity Scan
> Showing 5 of 5 defect(s)
>
>
> ** CID 453851:  Memory - corruptions  (OVERLAPPING_COPY)
> /cmd/net.c: 279 in netboot_update_env()
>
>
> ________________________________________________________________________________________________________
> *** CID 453851:  Memory - corruptions  (OVERLAPPING_COPY)
> /cmd/net.c: 279 in netboot_update_env()
> 273
> 274             if (IS_ENABLED(CONFIG_IPV6)) {
> 275                     if (!ip6_is_unspecified_addr(&net_ip6) ||
> 276                         net_prefix_length != 0) {
> 277                             sprintf(tmp, "%pI6c", &net_ip6);
> 278                             if (net_prefix_length != 0)
>>>>      CID 453851:  Memory - corruptions  (OVERLAPPING_COPY)
>>>>      In the call to function "sprintf", the arguments "tmp" and "tmp"
Just submitted a patch to fix 453851.
> may point to the same object.
> 279                                     sprintf(tmp, "%s/%d", tmp,
> net_prefix_length);
> 280
> 281                             env_set("ip6addr", tmp);
> 282                     }
> 283
> 284                     if (!ip6_is_unspecified_addr(&net_server_ip6)) {
>
> ** CID 450971:  Insecure data handling  (TAINTED_SCALAR)
> /net/ndisc.c: 391 in process_ra()
>
>
> ________________________________________________________________________________________________________
> *** CID 450971:  Insecure data handling  (TAINTED_SCALAR)
> /net/ndisc.c: 391 in process_ra()
> 385             /* Ignore the packet if router lifetime is 0. */
> 386             if (!icmp->icmp6_rt_lifetime)
> 387                     return -EOPNOTSUPP;
> 388
> 389             /* Processing the options */
> 390             option = msg->opt;
>>>>      CID 450971:  Insecure data handling  (TAINTED_SCALAR)
>>>>      Using tainted variable "remaining_option_len" as a loop boundary.
> 391             while (remaining_option_len > 0) {
> 392                     /* The 2nd byte of the option is its length. */
> 393                     option_len = option[1];
> 394                     /* All included options should have a positive
> length. */
> 395                     if (option_len == 0)
> 396                             return -EINVAL;
>
> ** CID 450969:  Security best practices violations  (DC.WEAK_CRYPTO)
> /net/ndisc.c: 209 in ip6_send_rs()
>
>
> ________________________________________________________________________________________________________
> *** CID 450969:  Security best practices violations  (DC.WEAK_CRYPTO)
> /net/ndisc.c: 209 in ip6_send_rs()
> 203                                    icmp_len, PROT_ICMPV6, pcsum);
> 204             msg->icmph.icmp6_cksum = csum;
> 205             pkt += icmp_len;
> 206
> 207             /* Wait up to 1 second if it is the first try to get the RA
> */
> 208             if (retry_count == 0)
>>>>      CID 450969:  Security best practices violations  (DC.WEAK_CRYPTO)
>>>>      "rand" should not be used for security-related applications,
> because linear congruential algorithms are too easy to break.
> 209                     udelay(((unsigned int)rand() % 1000000) *
> MAX_SOLICITATION_DELAY);
> 210
> 211             /* send it! */
> 212             net_send_packet(net_tx_packet, (pkt - net_tx_packet));
> 213
> 214             retry_count++;
>
> ** CID 436282:    (DC.WEAK_CRYPTO)
> /net/dhcpv6.c: 621 in dhcp6_state_machine()
> /net/dhcpv6.c: 627 in dhcp6_state_machine()
> /net/dhcpv6.c: 628 in dhcp6_state_machine()
> /net/dhcpv6.c: 662 in dhcp6_state_machine()
> /net/dhcpv6.c: 613 in dhcp6_state_machine()
>
>
> ________________________________________________________________________________________________________
> *** CID 436282:    (DC.WEAK_CRYPTO)
> /net/dhcpv6.c: 621 in dhcp6_state_machine()
> 615             /* handle state machine entry conditions */
> 616             if (sm_params.curr_state != sm_params.next_state) {
> 617                     sm_params.retry_cnt = 0;
> 618
> 619                     if (sm_params.next_state == DHCP6_SOLICIT) {
> 620                             /* delay a random ammount (special for
> SOLICIT) */
>>>>      CID 436282:    (DC.WEAK_CRYPTO)
>>>>      "rand" should not be used for security-related applications,
> because linear congruential algorithms are too easy to break.
> 621                             udelay((rand() % SOL_MAX_DELAY_MS) * 1000);
> 622                             /* init timestamp variables after SOLICIT
> delay */
> 623                             sm_params.dhcp6_start_ms = get_timer(0);
> 624                             sm_params.dhcp6_retry_start_ms =
> sm_params.dhcp6_start_ms;
> 625                             sm_params.dhcp6_retry_ms =
> sm_params.dhcp6_start_ms;
> 626                             /* init transaction and ia_id */
> /net/dhcpv6.c: 627 in dhcp6_state_machine()
> 621                             udelay((rand() % SOL_MAX_DELAY_MS) * 1000);
> 622                             /* init timestamp variables after SOLICIT
> delay */
> 623                             sm_params.dhcp6_start_ms = get_timer(0);
> 624                             sm_params.dhcp6_retry_start_ms =
> sm_params.dhcp6_start_ms;
> 625                             sm_params.dhcp6_retry_ms =
> sm_params.dhcp6_start_ms;
> 626                             /* init transaction and ia_id */
>>>>      CID 436282:    (DC.WEAK_CRYPTO)
>>>>      "rand" should not be used for security-related applications,
> because linear congruential algorithms are too easy to break.
> 627                             sm_params.trans_id = rand() & 0xFFFFFF;
> 628                             sm_params.ia_id = rand();
> 629                             /* initialize retransmission parameters */
> 630                             sm_params.irt_ms = SOL_TIMEOUT_MS;
> 631                             sm_params.mrt_ms = updated_sol_max_rt_ms;
> 632                             /* RFCs default MRC is be 0 (try infinitely)
> /net/dhcpv6.c: 628 in dhcp6_state_machine()
> 622                             /* init timestamp variables after SOLICIT
> delay */
> 623                             sm_params.dhcp6_start_ms = get_timer(0);
> 624                             sm_params.dhcp6_retry_start_ms =
> sm_params.dhcp6_start_ms;
> 625                             sm_params.dhcp6_retry_ms =
> sm_params.dhcp6_start_ms;
> 626                             /* init transaction and ia_id */
> 627                             sm_params.trans_id = rand() & 0xFFFFFF;
>>>>      CID 436282:    (DC.WEAK_CRYPTO)
>>>>      "rand" should not be used for security-related applications,
> because linear congruential algorithms are too easy to break.
> 628                             sm_params.ia_id = rand();
> 629                             /* initialize retransmission parameters */
> 630                             sm_params.irt_ms = SOL_TIMEOUT_MS;
> 631                             sm_params.mrt_ms = updated_sol_max_rt_ms;
> 632                             /* RFCs default MRC is be 0 (try infinitely)
> 633                              * give up after CONFIG_NET_RETRY_COUNT
> number of tries (same as DHCPv4)
> /net/dhcpv6.c: 662 in dhcp6_state_machine()
> 656                 (sm_params.mrd_ms != 0 &&
> 657                  ((sm_params.dhcp6_retry_ms -
> sm_params.dhcp6_retry_start_ms) >= sm_params.mrd_ms))) {
> 658                     sm_params.next_state = DHCP6_FAIL;
> 659             }
> 660
> 661             /* calculate retransmission timeout (RT) */
>>>>      CID 436282:    (DC.WEAK_CRYPTO)
>>>>      "rand" should not be used for security-related applications,
> because linear congruential algorithms are too easy to break.
> 662             rand_minus_plus_100 = ((rand() % 200) - 100);
> 663             if (sm_params.retry_cnt == 0) {
> 664                     sm_params.rt_ms = sm_params.irt_ms +
> 665                                       ((sm_params.irt_ms *
> rand_minus_plus_100) / 1000);
> 666             } else {
> 667                     sm_params.rt_ms = (2 * sm_params.rt_prev_ms) +
> /net/dhcpv6.c: 613 in dhcp6_state_machine()
> 607                      * Proceed anyway to proceed DONE/FAIL actions
> 608                      */
> 609                     debug("Unexpected DHCP6 state : %d\n",
> sm_params.curr_state);
> 610                     break;
> 611             }
> 612             /* re-seed the RNG */
>>>>      CID 436282:    (DC.WEAK_CRYPTO)
>>>>      "rand" should not be used for security-related applications,
We can ignore 436282. For DHCP6, we seed using srand_mac() to ensure 
that rand() will produce enough variation for each device on the 
network.  The numbers from rand() are used to introduce variation in the 
delay between re-transmissions to avoid excessive server congestion if 
all clients are started at the same time (such as a power loss).  These 
values are not used for crypto.
> because linear congruential algorithms are too easy to break.
> 613             srand(get_ticks() + rand());
> 614
> 615             /* handle state machine entry conditions */
> 616             if (sm_params.curr_state != sm_params.next_state) {
> 617                     sm_params.retry_cnt = 0;
> 618
>
> ** CID 436278:    (TAINTED_SCALAR)
> /net/dhcpv6.c: 321 in dhcp6_parse_options()
>
>
> ________________________________________________________________________________________________________
> *** CID 436278:    (TAINTED_SCALAR)
> /net/dhcpv6.c: 376 in dhcp6_parse_options()
> 370                                     if (sm_params.curr_state ==
> DHCP6_SOLICIT)
> 371                                             sm_params.mrt_ms =
> updated_sol_max_rt_ms;
> 372                             }
> 373                             break;
> 374                     case DHCP6_OPTION_OPT_BOOTFILE_URL:
> 375                             debug("DHCP6_OPTION_OPT_BOOTFILE_URL
> FOUND\n");
>>>>      CID 436278:    (TAINTED_SCALAR)
>>>>      Passing tainted expression "option_len + 1" to "copy_filename",
> which uses it as a loop boundary.
> 376                             copy_filename(net_boot_file_name,
> option_ptr, option_len + 1);
> 377                             debug("net_boot_file_name: %s\n",
> net_boot_file_name);
> 378
> 379                             /* copy server_ip6 (required for PXE) */
> 380                             s = strchr(net_boot_file_name, '[');
> 381                             e = strchr(net_boot_file_name, ']');
> /net/dhcpv6.c: 321 in dhcp6_parse_options()
> 315             while (option_hdr < (struct dhcp6_option_hdr *)(rx_pkt +
> len)) {
> 316                     option_ptr = ((uchar *)option_hdr) + sizeof(struct
> dhcp6_hdr);
> 317                     option_len = ntohs(option_hdr->option_len);
> 318
> 319                     switch (ntohs(option_hdr->option_id)) {
> 320                     case DHCP6_OPTION_CLIENTID:
>>>>      CID 436278:    (TAINTED_SCALAR)
>>>>      Passing tainted expression "option_len" to "memcmp", which uses it

Just submitted a patch to fix 436278.

> as an offset. [Note: The source code implementation of the function has
> been overridden by a builtin model.]
> 321                             if (memcmp(option_ptr, sm_params.duid,
> option_len)
> 322                                 != 0) {
> 323                                     debug("CLIENT ID DOESN'T MATCH\n");
> 324                             } else {
> 325                                     debug("CLIENT ID FOUND and
> MATCHES\n");
> 326                                     sm_params.rx_status.client_id_match
> = true;
>
>

  parent reply	other threads:[~2023-05-18 21:04 UTC|newest]

Thread overview: 119+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-08 20:20 Fwd: New Defects reported by Coverity Scan for Das U-Boot Tom Rini
2023-05-15 21:59 ` Ehsan Mohandesi
2023-05-18 21:04 ` Sean Edmond [this message]
  -- strict thread matches above, loose matches on Subject: below --
2026-07-29 17:07 Tom Rini
2026-07-07 18:58 Tom Rini
2026-06-22 22:43 Tom Rini
2026-06-26 18:28 ` Quentin Schulz
2026-06-26 18:32   ` Dario Binacchi
2026-06-26 21:53   ` Tom Rini
2026-05-11 22:35 Tom Rini
2026-05-08 23:42 Tom Rini
2026-05-14 15:39 ` Lucien.Jheng
2026-04-28 14:04 Tom Rini
2026-04-29  6:31 ` Michal Simek
2026-05-01 22:51   ` Raymond Mao
2026-05-12  8:44 ` Christian Pötzsch
2026-05-12 18:38   ` Tom Rini
2026-04-06 19:12 Tom Rini
2026-03-09 21:23 Tom Rini
2026-03-09 22:05 ` Raphaël Gallais-Pou
2026-03-09 22:13   ` Tom Rini
2026-02-23 19:51 Tom Rini
2026-02-13 22:09 Tom Rini
2026-02-18 23:02 ` Chris Morgan
2026-02-20 16:11   ` Tom Rini
2026-02-20 16:23     ` Chris Morgan
2026-01-16 19:43 Tom Rini
2026-02-09 11:05 ` Guillaume La Roque
2026-02-20 16:11   ` Tom Rini
2026-01-06 20:36 Tom Rini
2026-01-05 23:58 Tom Rini
2026-01-06  9:37 ` Mattijs Korpershoek
2026-01-06 17:15   ` Tom Rini
2026-01-06 10:03 ` Heiko Schocher
2025-12-08 19:38 Tom Rini
2025-11-23 19:03 Tom Rini
2025-11-10 18:55 Tom Rini
2025-10-11 18:06 Tom Rini
2025-10-12 14:22 ` Mikhail Kshevetskiy
2025-10-12 19:07   ` Tom Rini
2025-11-01  6:32     ` Mikhail Kshevetskiy
2025-11-03 15:17       ` Tom Rini
2025-11-03 15:24         ` Michael Nazzareno Trimarchi
2025-08-06 18:35 Tom Rini
2025-08-07  9:17 ` Heiko Schocher
2025-08-08  3:37   ` Maniyam, Dinesh
2025-08-08  4:01     ` Heiko Schocher
2025-07-29 16:32 Tom Rini
2025-07-25 13:26 Tom Rini
2025-07-25 13:34 ` Michal Simek
2025-08-04  9:11 ` Alexander Dahl
2025-07-14 23:29 Tom Rini
2025-07-15 13:45 ` Rasmus Villemoes
2025-07-08 14:10 Tom Rini
2025-04-28 21:59 Tom Rini
2025-04-29 12:07 ` Jerome Forissier
2025-04-30 16:50 ` Marek Vasut
2025-04-30 17:01   ` Tom Rini
2025-04-30 18:23 ` Heinrich Schuchardt
2025-04-30 19:14   ` Tom Rini
2025-03-11  1:49 Tom Rini
2025-02-25  2:39 Tom Rini
2025-02-25  6:06 ` Heiko Schocher
2025-02-25 10:48   ` Quentin Schulz
2025-02-25 10:54     ` Heiko Schocher
2025-02-10 22:26 Tom Rini
2025-02-11  6:14 ` Heiko Schocher
2025-02-11 22:30   ` Tom Rini
2024-12-31 13:55 Tom Rini
2024-12-24 17:14 Tom Rini
2024-11-15 13:27 Tom Rini
2024-11-12  2:11 Tom Rini
2024-10-28  3:11 Tom Rini
2024-10-19 16:16 Tom Rini
2024-10-16  3:47 Tom Rini
2024-10-16  5:56 ` Tudor Ambarus
2024-10-07 17:15 Tom Rini
2024-07-23 14:18 Tom Rini
2024-07-24  9:21 ` Mattijs Korpershoek
2024-07-24  9:45   ` Heinrich Schuchardt
2024-07-24  9:56     ` Mattijs Korpershoek
2024-07-24 10:06       ` Heinrich Schuchardt
2024-07-24 22:40         ` Tom Rini
2024-07-25  8:04           ` Mattijs Korpershoek
2024-07-25 17:16             ` Tom Rini
2024-07-24  9:53   ` Mattijs Korpershoek
2024-04-22 21:48 Tom Rini
2024-01-29 23:55 Tom Rini
2024-01-30  8:14 ` Heinrich Schuchardt
     [not found] <20240127154018.GC785631@bill-the-cat>
2024-01-27 20:56 ` Heinrich Schuchardt
2024-01-28  8:51   ` Heinrich Schuchardt
2024-01-22 23:52 Tom Rini
2024-01-22 23:30 Tom Rini
2024-01-23  8:15 ` Hugo Cornelis
     [not found] <65a933ab652b3_da12cbd3e77f998728e5@prd-scan-dashboard-0.mail>
2024-01-19  8:47 ` Heinrich Schuchardt
2024-01-18 14:35 Tom Rini
2024-01-08 17:45 Tom Rini
2024-01-09  5:26 ` Sean Anderson
2024-01-09 22:18   ` Tom Rini
2023-08-21 21:09 Tom Rini
2023-08-24  9:27 ` Abdellatif El Khlifi
2023-08-28 16:09   ` Alvaro Fernando García
2023-08-28 16:11     ` Tom Rini
2023-10-20 11:57 ` Abdellatif El Khlifi
2023-10-25 14:57   ` Tom Rini
2023-10-25 15:12     ` Abdellatif El Khlifi
2023-10-25 15:15       ` Tom Rini
2023-10-31 14:21         ` Abdellatif El Khlifi
2023-02-14 14:26 Tom Rini
2022-11-21 19:43 Tom Rini
2022-11-09 15:40 Tom Rini
     [not found] <62df3a0cb9fd2_30ed5f2acd4da7b9a431758@prd-scan-dashboard-0.mail>
2022-07-26  4:22 ` Heinrich Schuchardt
     [not found] <611aaf735d268_21438d2b07184e399c79439@prd-scan-dashboard-0.mail>
2021-08-17  5:21 ` Heinrich Schuchardt
2021-08-17 15:17   ` Tom Rini
     [not found] <6082f7faa423_5762a2b148d4af9a86820@prd-scan-dashboard-0.mail>
2021-04-24  4:52 ` Heinrich Schuchardt
     [not found] <5ecd3c8249d1_d6f562acb748daf5820386@appnode-2.mail>
     [not found] ` <CA+M6bX=AmT+SyM0Snt2POLy0-vpD__6CD4j6ifqMqh63yYJBLA@mail.gmail.com>
     [not found]   ` <8ea1ca2f-2826-58f2-4b6b-ed5cfe977467@gmx.de>
     [not found]     ` <20200526184027.GJ12717@bill-the-cat>
2020-05-26 20:02       ` Heinrich Schuchardt
2020-05-26 20:10         ` Tom Rini
2020-05-26 20:36           ` Heinrich Schuchardt
2020-05-26 20:48             ` Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8ed48347-1e66-0f4f-3c7c-28e7b56bd3e4@linux.microsoft.com \
    --to=seanedmond@linux.microsoft.com \
    --cc=seanedmond@microsoft.com \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.