Bug ID 1506
Summary Fix undefined behavior in RTE_IPV4 macro
Product DPDK
Version 24.07
Hardware All
OS All
Status UNCONFIRMED
Severity normal
Priority Normal
Component core
Assignee dev@dpdk.org
Reporter user202729@protonmail.com
Target Milestone ---

Currently we have the following definition

```
/** Create IPv4 address */
#define RTE_IPV4(a, b, c, d) ((uint32_t)(((a) & 0xff) << 24) | \
                                           (((b) & 0xff) << 16) | \
                                           (((c) & 0xff) << 8)  | \
                                           ((d) & 0xff))
```

The problem is that the cast to `uint32_t` is done after the shift, and
overflowing left shift is undefined behavior in C and C++:
https://stackoverflow.com/questions/3784996/why-does-left-shift-operation-invoke-undefined-behaviour-when-the-left-side-oper
.

The fix is easy, just cast the `(a) & 0xff` to `uint32_t` before shifting it by
24.
          


You are receiving this mail because: