linux
netpoll_setup() returns an uninitialized value (error code)
Bug fixed by commit e39363a9def
| Type | UninitializedVariable |
| Config | "NETPOLL && !IPV6" (2nd degree) |
| Fix-in | code |
| Location | net/ |
__attribute__ ((noinline)) int nondet() { return 42; }
#ifdef CONFIG_NETPOLL
int netpoll_setup()
{
int err;
#ifdef CONFIG_IPV6
err = -1;
if (nondet())
goto put;
#else
goto put; // (2)
#endif
put:
return err; // ERROR (3)
}
#endif
int main(void)
{
#ifdef CONFIG_NETPOLL
netpoll_setup(); // (1)
#endif
return 0;
}
diff --git a/simple/e39363a.c b/simple/e39363a.c
--- a/simple/e39363a.c
+++ b/simple/e39363a.c
@@ -11,6 +11,7 @@
if (nondet())
goto put;
#else
+ err = -2;
goto put; // (2)
#endif
#ifdef UNK_TRUE
#define unk() 1
#else
#include <stdlib.h>
#define unk() (rand() % 2)
#endif
int main()
{
#ifdef CONFIG_NETPOLL
// netpoll_setup();
int err;
#ifdef CONFIG_IPV6
err = -1;
if (unk())
goto put;
#else
goto put;
#endif
put:
return err; // ERROR
#endif
return 0;
}
. call net/core/netpoll.c:1045:netpoll_setup() . [!IPV6] 1143: goto put; . ERROR 1162: return err;