Seems like a false positive, easily fix by explicitly initializing
variable to NULL.
In function ‘af_xdp_read_poll’,
inlined from ‘net_init_af_xdp’ at ../net/af-xdp.c:546:5:
../net/af-xdp.c:78:10: error: ‘s’ may be used uninitialized [-Werror=maybe-uninitialized]
78 | if (s->read_poll != enable) {
| ~^~~~~~~~~~~
../net/af-xdp.c: In function ‘net_init_af_xdp’:
../net/af-xdp.c:461:17: note: ‘s’ was declared here
461 | AFXDPState *s;
|
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
---
net/af-xdp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/af-xdp.c b/net/af-xdp.c
index 1ffd6363a8c..72d75748c6d 100644
--- a/net/af-xdp.c
+++ b/net/af-xdp.c
@@ -458,7 +458,7 @@ int net_init_af_xdp(const Netdev *netdev,
g_autofree int *sock_fds = NULL;
int i, queues;
Error *err = NULL;
- AFXDPState *s;
+ AFXDPState *s = NULL;
bool inhibit;
ifindex = if_nametoindex(opts->ifname);
--
2.43.0
On 6/4/26 11:51 PM, Pierrick Bouvier wrote:
> Seems like a false positive, easily fix by explicitly initializing
> variable to NULL.
>
> In function ‘af_xdp_read_poll’,
> inlined from ‘net_init_af_xdp’ at ../net/af-xdp.c:546:5:
> ../net/af-xdp.c:78:10: error: ‘s’ may be used uninitialized [-Werror=maybe-uninitialized]
> 78 | if (s->read_poll != enable) {
> | ~^~~~~~~~~~~
> ../net/af-xdp.c: In function ‘net_init_af_xdp’:
> ../net/af-xdp.c:461:17: note: ‘s’ was declared here
> 461 | AFXDPState *s;
> |
>
I guess the 'nc0 && !inhibit' check is what making things confusing.
I'd suggest to remove the nc0 check and move the upcast out of the
if statement. Then maybe collapse the two if statements into one.
It seems cleaner than just silencing the warning.
Will that solve the problem?
Best regards, Ilya Maximets.
> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
> ---
> net/af-xdp.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/af-xdp.c b/net/af-xdp.c
> index 1ffd6363a8c..72d75748c6d 100644
> --- a/net/af-xdp.c
> +++ b/net/af-xdp.c
> @@ -458,7 +458,7 @@ int net_init_af_xdp(const Netdev *netdev,
> g_autofree int *sock_fds = NULL;
> int i, queues;
> Error *err = NULL;
> - AFXDPState *s;
> + AFXDPState *s = NULL;
> bool inhibit;
>
> ifindex = if_nametoindex(opts->ifname);
On 6/5/2026 12:09 PM, Ilya Maximets wrote:
> On 6/4/26 11:51 PM, Pierrick Bouvier wrote:
>> Seems like a false positive, easily fix by explicitly initializing
>> variable to NULL.
>>
>> In function ‘af_xdp_read_poll’,
>> inlined from ‘net_init_af_xdp’ at ../net/af-xdp.c:546:5:
>> ../net/af-xdp.c:78:10: error: ‘s’ may be used uninitialized [-Werror=maybe-uninitialized]
>> 78 | if (s->read_poll != enable) {
>> | ~^~~~~~~~~~~
>> ../net/af-xdp.c: In function ‘net_init_af_xdp’:
>> ../net/af-xdp.c:461:17: note: ‘s’ was declared here
>> 461 | AFXDPState *s;
>> |
>>
>
> I guess the 'nc0 && !inhibit' check is what making things confusing.
> I'd suggest to remove the nc0 check and move the upcast out of the
> if statement. Then maybe collapse the two if statements into one.
>
> It seems cleaner than just silencing the warning.
>
> Will that solve the problem?
>
Such patch?
```
diff --git a/net/af-xdp.c b/net/af-xdp.c
index 72d75748c6d..b25c7e69d7e 100644
--- a/net/af-xdp.c
+++ b/net/af-xdp.c
@@ -458,7 +458,7 @@ int net_init_af_xdp(const Netdev *netdev,
g_autofree int *sock_fds = NULL;
int i, queues;
Error *err = NULL;
- AFXDPState *s = NULL;
+ AFXDPState *s;
bool inhibit;
ifindex = if_nametoindex(opts->ifname);
@@ -533,8 +533,9 @@ int net_init_af_xdp(const Netdev *netdev,
}
}
- if (nc0 && !inhibit) {
- s = DO_UPCAST(AFXDPState, nc, nc0);
+ s = DO_UPCAST(AFXDPState, nc, nc0);
+
+ if (!inhibit) {
if (bpf_xdp_query_id(s->ifindex, s->xdp_flags, &prog_id) ||
!prog_id) {
error_setg_errno(&err, errno,
"no XDP program loaded on '%s', ifindex: %d",
```
It solves the issue indeed, and we are guaranteed it's correct since
queues >= 1. Another thing that work also, and is more concise is:
```
@@ -533,6 +533,8 @@ int net_init_af_xdp(const Netdev *netdev,
}
}
+ g_assert(queues > 0);
+
if (nc0 && !inhibit) {
s = DO_UPCAST(AFXDPState, nc, nc0);
if (bpf_xdp_query_id(s->ifindex, s->xdp_flags, &prog_id) ||
!prog_id) {
```
Which version do you prefer?
> Best regards, Ilya Maximets.
>
>> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
>> ---
>> net/af-xdp.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/net/af-xdp.c b/net/af-xdp.c
>> index 1ffd6363a8c..72d75748c6d 100644
>> --- a/net/af-xdp.c
>> +++ b/net/af-xdp.c
>> @@ -458,7 +458,7 @@ int net_init_af_xdp(const Netdev *netdev,
>> g_autofree int *sock_fds = NULL;
>> int i, queues;
>> Error *err = NULL;
>> - AFXDPState *s;
>> + AFXDPState *s = NULL;
>> bool inhibit;
>>
>> ifindex = if_nametoindex(opts->ifname);
>
Regards,
Pierrick
© 2016 - 2026 Red Hat, Inc.