Skip to contentSkip to conversation

auxdisplay: panel: avoid gcc 8's Wstringop-truncation warning

PATCH Superseded Miguel Ojeda 2 participants 3 messages Aug 1, 2018

Subsystems (2)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 2/2 auxdisplay: panel: avoid gcc 8's Wstringop-truncation warning

Let gcc know it is not meant to be NUL-terminated by annotating with the new __nonstring variable attribute; and remove the comment since it conveys the same information.

Cc Willy Tarreau <[email protected]>
Cc Geert Uytterhoeven <[email protected]>
Cc Martin Sebor <[email protected]>
---
 drivers/auxdisplay/panel.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/auxdisplay/panel.c +3 -4
index 3b25a643058c..21b9b2f2470a 100644
@@ -155,10 +155,9 @@ struct logical_input {
 			int release_data;
 		} std;
 		struct {	/* valid when type == INPUT_TYPE_KBD */
-			/* strings can be non null-terminated */
-			char press_str[sizeof(void *) + sizeof(int)];
-			char repeat_str[sizeof(void *) + sizeof(int)];
-			char release_str[sizeof(void *) + sizeof(int)];
+			char press_str[sizeof(void *) + sizeof(int)] __nonstring;
+			char repeat_str[sizeof(void *) + sizeof(int)] __nonstring;
+			char release_str[sizeof(void *) + sizeof(int)] __nonstring;
 		} kbd;
 	} u;
 };
Signature · 1 line
2.17.1
#1 lore raw
Quoted 20 lines · Miguel Ojeda

Let gcc know it is not meant to be NUL-terminated by annotating with the new __nonstring variable attribute; and remove the comment since it conveys the same information.

Cc Willy Tarreau <[email protected]>
Cc Geert Uytterhoeven <[email protected]>
Cc Martin Sebor <[email protected]>
---
 drivers/auxdisplay/panel.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/auxdisplay/panel.c +0 -0
index 3b25a643058c..21b9b2f2470a 100644
@@ -155,10 +155,9 @@ struct logical_input {
                        int release_data;
                } std;
                struct {        /* valid when type == INPUT_TYPE_KBD */

drivers/auxdisplay/panel.c struct logical_input { · line 163

Quoted 10 lines
drivers/auxdisplay/panel.c +3 -4
-                       /* strings can be non null-terminated */
-                       char press_str[sizeof(void *) + sizeof(int)];
-                       char repeat_str[sizeof(void *) + sizeof(int)];
-                       char release_str[sizeof(void *) + sizeof(int)];
+                       char press_str[sizeof(void *) + sizeof(int)] __nonstring;
+                       char repeat_str[sizeof(void *) + sizeof(int)] __nonstring;
+                       char release_str[sizeof(void *) + sizeof(int)] __nonstring;
                } kbd;
        } u;
 };

If it's not a string, why not use "u8" instead of "char"? Does the warning persist?

-Kees

Signature · 2 lines
Kees Cook
Pixel Security
#2 lore raw
Quoted 27 lines · Kees Cook
Quoted 25 lines · Miguel Ojeda

Let gcc know it is not meant to be NUL-terminated by annotating with the new __nonstring variable attribute; and remove the comment since it conveys the same information.

Cc Willy Tarreau <[email protected]>
Cc Geert Uytterhoeven <[email protected]>
Cc Martin Sebor <[email protected]>
---
 drivers/auxdisplay/panel.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/auxdisplay/panel.c +1 -4
index 3b25a643058c..21b9b2f2470a 100644
@@ -155,10 +155,9 @@ struct logical_input {
                        int release_data;
                } std;
                struct {        /* valid when type == INPUT_TYPE_KBD */
-                       /* strings can be non null-terminated */
-                       char press_str[sizeof(void *) + sizeof(int)];
-                       char repeat_str[sizeof(void *) + sizeof(int)];
-                       char release_str[sizeof(void *) + sizeof(int)];
+                       char press_str[sizeof(void *) + sizeof(int)] __nonstring;
Quoted 8 lines

drivers/auxdisplay/panel.c struct logical_input { · line 163

Quoted 5 lines
drivers/auxdisplay/panel.c +2 -0
+                       char repeat_str[sizeof(void *) + sizeof(int)] __nonstring;
+                       char release_str[sizeof(void *) + sizeof(int)] __nonstring;
                } kbd;
        } u;
 };

If it's not a string, why not use "u8" instead of "char"? Does the warning persist?

Yes, it persists (on purpose). Originally it didn't, but see the discussion at:

https://www.spinics.net/lists/kernel/msg2737596.html

And:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84725

Cheers,
Miguel

Quoted 6 lines

-Kees

--
Kees Cook
Pixel Security