-
Notifications
You must be signed in to change notification settings - Fork 3.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
softflowd: do_page_fault(): sending SIGSEGV to softflowd for invalid read access from ..... #19655
Comments
and this are the last logs when I run softflowd with strace
|
I can reproduce this on same target platform (mips24kc). Build log shows some time_t-related warnings.
So source code is assuming time_t is 32 bit because target is 32 bit platform, but because of musl in 22.03 always using 64 bit for time_t this isn't correct. I added a patch for this and recompiled. Then no more segfault. Can you try and confirm from your end? Regards, |
btw i found a very similar bug for the ripe atlas probe... the fix is to just cast everything related to time_t to %lld and cast them to (long long) to handle both 32 and 64 bit |
@micmac1 the patch works for me. Thanks a lot. Hope it will be merged soon. |
Compiling softflowd against musl 1.2.x for 32 bit targets shows some warnings: softflowd.c: In function 'format_flow': softflowd.c:307:13: warning: format '%ld' expects argument of type 'long int', but argument 15 has type 'suseconds_t' {aka 'long long int'} [-Wformat=] 307 | "seq:%" PRIu64 " [%s]:%hu <> [%s]:%hu proto:%u " | ^~~~~~~ ...... 315 | (flow->flow_start.tv_usec + 500) / 1000, fin_time, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | suseconds_t {aka long long int} softflowd.c:309:27: note: format string is defined here 309 | "start:%s.%03ld finish:%s.%03ld tcp>:%02x tcp<:%02x " | ~~~~^ | | | long int | %03lld softflowd.c:307:13: warning: format '%ld' expects argument of type 'long int', but argument 17 has type 'suseconds_t' {aka 'long long int'} [-Wformat=] 307 | "seq:%" PRIu64 " [%s]:%hu <> [%s]:%hu proto:%u " | ^~~~~~~ ...... 316 | (flow->flow_last.tv_usec + 500) / 1000, flow->tcp_flags[0], | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | suseconds_t {aka long long int} softflowd.c:309:43: note: format string is defined here 309 | "start:%s.%03ld finish:%s.%03ld tcp>:%02x tcp<:%02x " | ~~~~^ | | | long int | %03lld softflowd.c: In function 'dump_flows': softflowd.c:1173:16: warning: format '%ld' expects argument of type 'long int', but argument 4 has type 'time_t' {aka 'long long int'} [-Wformat=] 1173 | "EXPIRY EVENT for flow %" PRIu64 " in %ld seconds\n", | ^~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | expiry->flow->flow_seq, (long int) expiry->expires_at - now); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | time_t {aka long long int} softflowd.c:1173:56: note: format string is defined here 1173 | "EXPIRY EVENT for flow %" PRIu64 " in %ld seconds\n", | ~~^ | | | long int | %lld Dumping flow data results in a segmentation fault: root@OpenWrt:~# softflowctl dump-flows softflowd[6688]: Dumping flow data: No further output. But in the system log a segmentation fault is visible: Fri Oct 21 07:13:47 2022 kern.info kernel: [745743.417947] do_page_fault(): sending SIGSEGV to softflowd for invalid read access from 00000326 Fri Oct 21 07:13:47 2022 kern.info kernel: [745743.427175] epc = 77de0dc0 in libc.so[77d62000+a9000] Fri Oct 21 07:13:47 2022 kern.info kernel: [745743.432682] ra = 77de2b04 in libc.so[77d62000+a9000] Fri Oct 21 07:13:47 2022 kern.info kernel: [745743.443552] device br-lan.1 left promiscuous mode Fri Oct 21 07:13:47 2022 kern.info kernel: [745743.448485] device br-lan left promiscuous mode Fri Oct 21 07:13:52 2022 kern.info kernel: [745748.464316] device br-lan.1 entered promiscuous mode Fri Oct 21 07:13:52 2022 kern.info kernel: [745748.469774] device br-lan entered promiscuous mode This was reported on the OpenWrt "packages" repository's issue tracker ([1]). musl 1.2 has time64 support, meaning it always uses 64 bit time_t (also when compiling for 32 bit targets), to be Y2K38 safe. This commit changes the format specifier from "%ld" to "%lld" to fix the compiler warnings and make the segmentation fault go away. [1] openwrt/packages#19655 Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
Add upstreamed patch to fix segmentation fault reported in [1]. [1] openwrt#19655 Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
Add upstreamed patch to fix segmentation fault reported in [1]. [1] openwrt#19655 Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net> (cherry picked from commit 9a1d8ff)
as this bug will be fixed in another ticket, I will close this one. |
Add upstreamed patch to fix segmentation fault reported in [1]. [1] #19655 Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
Add upstreamed patch to fix segmentation fault reported in [1]. [1] openwrt#19655 Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net> (cherry picked from commit 7d01963)
Add upstreamed patch to fix segmentation fault reported in [1]. [1] openwrt/packages#19655 Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
Add upstreamed patch to fix segmentation fault reported in [1]. [1] openwrt/packages#19655 Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
Add upstreamed patch to fix segmentation fault reported in [1]. [1] openwrt#19655 Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
Add upstreamed patch to fix segmentation fault reported in [1]. [1] openwrt#19655 Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net> (cherry picked from commit 7d01963)
Maintainer: @jesferman , @rvandegrift
Environment: OpenWrt 22.03.0, TP-Link Archer C7 v2, Qualcomm Atheros QCA9558 ver 1 rev 0
@rvandegrift this is not related to my ticket from yesterday. It is a different device running at a friend's house.
Description:
I'm running softflowd on a router where I get no flows when I call "softflowctl dump-flows"
When I call "softflowctl statistics" I see
but when I call "softflowctl dump-flows" I get
an a kernel log message like
The text was updated successfully, but these errors were encountered: