public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] testsuite: Handle default_packed targets in gcc.dg/plugin
@ 2023-03-09 18:56 Hans-Peter Nilsson
  2023-03-16 15:29 ` Ping: " Hans-Peter Nilsson
  2023-03-16 17:55 ` David Malcolm
  0 siblings, 2 replies; 8+ messages in thread
From: Hans-Peter Nilsson @ 2023-03-09 18:56 UTC (permalink / raw)
  To: gcc-patches; +Cc: dmalcolm

It's not obvious to me whether considered best to include or
exclude these tests that depend on structure layout details.
If excluding, the obvious alternative to this patch is then
to add a top one-liner (to dg-skip-if the test for
default_packed targets or a similar excluding expression).
I'm fine either way, just suggesting the following, which
handles the cris-elf test-case failures I see for these
tests, and causes no change in results for native
x86_64-pc-linux-gnu.

Beware that some of the tests have lines with trailing
whitespace.  Where lines are changed in this patch, the
trailing whitespace is removed.

Ok to commit?

-- >8 --
It's a judgement call whether to just skip some of these
tests rather than trying to match messages depending on the
layout of structures, but better include than exclude.

	* gcc.dg/plugin/infoleak-2.c,
	gcc.dg/plugin/infoleak-CVE-2011-1078-1.c,
	gcc.dg/plugin/infoleak-CVE-2011-1078-2.c,
	gcc.dg/plugin/infoleak-CVE-2017-18549-1.c,
	gcc.dg/plugin/infoleak-CVE-2017-18550-1.c,
	gcc.dg/plugin/infoleak-antipatterns-1.c,
	gcc.dg/plugin/infoleak-fixit-1.c: Handle default_packed targets.
---
 gcc/testsuite/gcc.dg/plugin/infoleak-2.c            | 13 ++++++++-----
 .../gcc.dg/plugin/infoleak-CVE-2011-1078-1.c        | 10 +++++-----
 .../gcc.dg/plugin/infoleak-CVE-2011-1078-2.c        | 10 +++++-----
 .../gcc.dg/plugin/infoleak-CVE-2017-18549-1.c       | 10 +++++-----
 .../gcc.dg/plugin/infoleak-CVE-2017-18550-1.c       |  7 ++++---
 .../gcc.dg/plugin/infoleak-antipatterns-1.c         | 10 +++++-----
 gcc/testsuite/gcc.dg/plugin/infoleak-fixit-1.c      | 10 ++++++----
 7 files changed, 38 insertions(+), 32 deletions(-)

diff --git a/gcc/testsuite/gcc.dg/plugin/infoleak-2.c b/gcc/testsuite/gcc.dg/plugin/infoleak-2.c
index 252f8f25918a..4ba484b3c6be 100644
--- a/gcc/testsuite/gcc.dg/plugin/infoleak-2.c
+++ b/gcc/testsuite/gcc.dg/plugin/infoleak-2.c
@@ -18,16 +18,19 @@ struct st
   int b:1; /* { dg-message "field 'b' is uninitialized \\(1 bit\\)" "field" } */
            /* { dg-message "padding after field 'b' is uninitialized \\(7 bits\\)" "padding" { target *-*-* } .-1 } */
   u8 d;    /* { dg-message "field 'd' is uninitialized \\(1 byte\\)" } */
-  int c:7; /* { dg-message "padding after field 'c' is uninitialized \\(9 bits\\)" } */
-  u16 e;   /* { dg-message "padding after field 'e' is uninitialized \\(2 bytes\\)" } */  
+  int c:7; /* { dg-message "padding after field 'c' is uninitialized \\(9 bits\\)" "padding" { target { ! default_packed } } } */
+           /* { dg-message "padding after field 'c' is uninitialized \\(1 bit\\)" "padding" { target default_packed } .-1 } */
+  u16 e;   /* { dg-message "padding after field 'e' is uninitialized \\(2 bytes\\)" "padding" { target { ! default_packed } } } */
 };
 
 void test (void __user *dst, u16 v)
 {
   struct st s; /* { dg-message "region created on stack here" "where" } */
-  /* { dg-message "capacity: 12 bytes" "capacity" { target *-*-* } .-1 } */
-  /* { dg-message "suggest forcing zero-initialization by providing a '\\{0\\}' initializer" "fix-it" { target *-*-* } .-2 } */  
+  /* { dg-message "capacity: 12 bytes" "capacity" { target { ! default_packed } } .-1 } */
+  /* { dg-message "capacity: 9 bytes" "capacity" { target default_packed } .-2 } */
+  /* { dg-message "suggest forcing zero-initialization by providing a '\\{0\\}' initializer" "fix-it" { target *-*-* } .-3 } */
   s.e = v;
   copy_to_user(dst, &s, sizeof (struct st)); /* { dg-warning "potential exposure of sensitive information by copying uninitialized data from stack" "warning" } */
-  /* { dg-message "10 bytes are uninitialized" "note how much" { target *-*-* } .-1 } */
+  /* { dg-message "10 bytes are uninitialized" "note how much" { target { ! default_packed } } .-1 } */
+  /* { dg-message "7 bytes are uninitialized" "note how much" { target default_packed } .-2 } */
 }
diff --git a/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-1.c b/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-1.c
index 3616fbe176b3..9269b911b22f 100644
--- a/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-1.c
+++ b/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-1.c
@@ -51,7 +51,7 @@ struct socket {
 
 struct sco_conninfo {
 	__u16 hci_handle;
-	__u8  dev_class[3]; /* { dg-message "padding after field 'dev_class' is uninitialized \\(1 byte\\)" } */
+	__u8  dev_class[3]; /* { dg-message "padding after field 'dev_class' is uninitialized \\(1 byte\\)" "padding" { target { ! default_packed } } } */
 };
 
 struct sco_conn {
@@ -83,8 +83,8 @@ static int sco_sock_getsockopt_old_broken(struct socket *sock, int optname, char
 {
 	struct sock *sk = sock->sk;
 	/* [...snip...] */
-	struct sco_conninfo cinfo; /* { dg-message "region created on stack here" "where" } */
-				   /* { dg-message "capacity: 6 bytes" "capacity" { target *-*-* } .-1 } */
+	struct sco_conninfo cinfo; /* { dg-message "region created on stack here" "where" { target { ! default_packed } } } */
+				   /* { dg-message "capacity: 6 bytes" "capacity" { target { ! default_packed } } .-1 } */
 	/* Note: 40 bits of fields, padded to 48.  */
 
 	int len, err = 0;
@@ -101,8 +101,8 @@ static int sco_sock_getsockopt_old_broken(struct socket *sock, int optname, char
 		memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
 
 		len = min_t(unsigned int, len, sizeof(cinfo));
-		if (copy_to_user(optval, (char *)&cinfo, len)) /* { dg-warning "potential exposure of sensitive information by copying uninitialized data from stack" "warning" { target *-*-* } } */
-			/* { dg-message "1 byte is uninitialized" "how much note" { target *-*-* } .-1 } */
+		if (copy_to_user(optval, (char *)&cinfo, len)) /* { dg-warning "potential exposure of sensitive information by copying uninitialized data from stack" "warning" { target { ! default_packed } } } */
+			/* { dg-message "1 byte is uninitialized" "how much note" { target { ! default_packed } } .-1 } */
 			err = -1;
 
 	/* [...snip...] */
diff --git a/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-2.c b/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-2.c
index 2096bda71798..d5f598b0878e 100644
--- a/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-2.c
+++ b/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-2.c
@@ -15,22 +15,22 @@ typedef unsigned short __u16;
 
 struct sco_conninfo {
 	__u16 hci_handle;
-	__u8  dev_class[3]; /* { dg-message "padding after field 'dev_class' is uninitialized \\(1 byte\\)" } */
+	__u8  dev_class[3]; /* { dg-message "padding after field 'dev_class' is uninitialized \\(1 byte\\)" "padding"  { target { ! default_packed } } } */
 };
 
 /* Adapted from sco_sock_getsockopt_old in net/bluetooth/sco.c.  */
 
 int test_1 (char __user *optval, const struct sco_conninfo *in)
 {
-	struct sco_conninfo cinfo; /* { dg-message "region created on stack here" "where" } */
-				   /* { dg-message "capacity: 6 bytes" "capacity" { target *-*-* } .-1 } */
+	struct sco_conninfo cinfo; /* { dg-message "region created on stack here" "where" { target { ! default_packed } } } */
+				   /* { dg-message "capacity: 6 bytes" "capacity" { target { ! default_packed } } .-1 } */
 	/* Note: 40 bits of fields, padded to 48.  */
 
 	cinfo.hci_handle = in->hci_handle;
 	memcpy(cinfo.dev_class, in->dev_class, 3);
 
-	copy_to_user(optval, &cinfo, sizeof(cinfo)); /* { dg-warning "potential exposure of sensitive information by copying uninitialized data from stack" "warning" } */
-	/* { dg-message "1 byte is uninitialized" "how much note" { target *-*-* } .-1 } */
+	copy_to_user(optval, &cinfo, sizeof(cinfo)); /* { dg-warning "potential exposure of sensitive information by copying uninitialized data from stack" "warning" { target { ! default_packed } } } */
+	/* { dg-message "1 byte is uninitialized" "how much note" { target { ! default_packed } } .-1 } */
 }
 
 int test_2 (char __user *optval, const struct sco_conninfo *in)
diff --git a/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18549-1.c b/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18549-1.c
index 8a1c816cc1b5..8fcf9a904a2a 100644
--- a/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18549-1.c
+++ b/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18549-1.c
@@ -35,7 +35,7 @@ struct aac_srb_reply
 	__le32		scsi_status;
 	__le32		data_xfer_length;
 	__le32		sense_data_size;
-	u8		sense_data[AAC_SENSE_BUFFERSIZE]; /* { dg-message "padding after field 'sense_data' is uninitialized \\(2 bytes\\)" } */
+	u8		sense_data[AAC_SENSE_BUFFERSIZE]; /* { dg-message "padding after field 'sense_data' is uninitialized \\(2 bytes\\)" "padding" { target { ! default_packed } } } */
 };
 
 #define		ST_OK		0
@@ -50,8 +50,8 @@ static int aac_send_raw_srb(/* [...snip...] */
 
 	/* [...snip...] */
 
-	struct aac_srb_reply reply; /* { dg-message "region created on stack here" "memspace message" } */
-	/* { dg-message "capacity: 52 bytes" "capacity message" { target *-*-* } .-1 } */
+	struct aac_srb_reply reply; /* { dg-message "region created on stack here" "memspace message" { target { ! default_packed } } } */
+	/* { dg-message "capacity: 52 bytes" "capacity message" { target { ! default_packed } } .-1 } */
 
 	reply.status = ST_OK;
 		
@@ -65,8 +65,8 @@ static int aac_send_raw_srb(/* [...snip...] */
 
 	/* [...snip...] */
 
-	if (copy_to_user(user_reply, &reply, /* { dg-warning "potential exposure of sensitive information by copying uninitialized data from stack" } */
-					     /* { dg-message "2 bytes are uninitialized" "note how much" { target *-*-* } .-1 } */
+	if (copy_to_user(user_reply, &reply, /* { dg-warning "potential exposure of sensitive information by copying uninitialized data from stack" "padding" { target { ! default_packed } } } */
+					     /* { dg-message "2 bytes are uninitialized" "note how much" { target { ! default_packed } } .-1 } */
 			 sizeof(struct aac_srb_reply))) {
 		/* [...snip...] */
 	}
diff --git a/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18550-1.c b/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18550-1.c
index 4272da96bab0..a7361f937401 100644
--- a/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18550-1.c
+++ b/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18550-1.c
@@ -31,7 +31,7 @@ struct aac_hba_info {
 	u8	driver_name[50]; /* { dg-message "field 'driver_name' is uninitialized \\(50 bytes\\)" } */
 	u8	adapter_number;
 	u8	system_io_bus_number;
-	u8	device_number; /* { dg-message "padding after field 'device_number' is uninitialized \\(3 bytes\\)" } */
+	u8	device_number; /* { dg-message "padding after field 'device_number' is uninitialized \\(3 bytes\\)" "padding" { target { ! default_packed } } } */
 	u32	function_number;
 	u32	vendor_id;
 	u32	device_id;
@@ -108,7 +108,8 @@ struct pci_bus {
 static int aac_get_hba_info(struct aac_dev *dev, void __user *arg)
 {
 	struct aac_hba_info hbainfo; /* { dg-message "region created on stack here" "memspace message" } */
-	/* { dg-message "capacity: 200 bytes" "capacity message" { target *-*-* } .-1 } */
+	/* { dg-message "capacity: 200 bytes" "capacity message" { target { ! default_packed } } .-1 } */
+	/* { dg-message "capacity: 194 bytes" "capacity message" { target default_packed } .-2 } */
 
 	hbainfo.adapter_number		= (u8) dev->id;
 	hbainfo.system_io_bus_number	= dev->pdev->bus->number;
@@ -121,7 +122,7 @@ static int aac_get_hba_info(struct aac_dev *dev, void __user *arg)
 	hbainfo.sub_system_id		= dev->pdev->subsystem_device;
 
 	if (copy_to_user(arg, &hbainfo, sizeof(struct aac_hba_info))) { /* { dg-warning "potential exposure of sensitive information by copying uninitialized data from stack" "warning" } */
-		/* { dg-message "177 bytes are uninitialized" "how much" { target *-*-* } .-1 } */
+		/* { dg-message "177 bytes are uninitialized" "how much" { target { ! default_packed } } .-1 } */
 		/* [...snip...] */
 	}
 
diff --git a/gcc/testsuite/gcc.dg/plugin/infoleak-antipatterns-1.c b/gcc/testsuite/gcc.dg/plugin/infoleak-antipatterns-1.c
index 500845364388..d9db2b3bdebc 100644
--- a/gcc/testsuite/gcc.dg/plugin/infoleak-antipatterns-1.c
+++ b/gcc/testsuite/gcc.dg/plugin/infoleak-antipatterns-1.c
@@ -90,21 +90,21 @@ int infoleak_heap_missing_a_field(void __user *dst, u32 v)
 
 struct infoleak_3
 {
-  u8 a; /* { dg-message "padding after field 'a' is uninitialized \\(3 bytes\\)" } */
+  u8 a; /* { dg-message "padding after field 'a' is uninitialized \\(3 bytes\\)" "padding" { target { ! default_packed } } } */
   /* padding here */
   u32 b;
 };
 
 int infoleak_stack_padding(void __user *dst, u8 p, u32 q)
 {
-  struct infoleak_3 st; /* { dg-message "region created on stack here" "where" } */
-  /* { dg-message "capacity: 8 bytes" "capacity" { target *-*-* } .-1 } */
+  struct infoleak_3 st; /* { dg-message "region created on stack here" "where" { target { ! default_packed } } } */
+  /* { dg-message "capacity: 8 bytes" "capacity" { target { ! default_packed } } .-1 } */
 
   st.a = p;
   st.b = q;
   /* No initialization of padding.  */
-  if (copy_to_user(dst, &st, sizeof(st))) /* { dg-warning "potential exposure of sensitive information by copying uninitialized data from stack" "warning" } */
-    /* { dg-message "3 bytes are uninitialized" "note how much" { target *-*-* } .-1 } */
+  if (copy_to_user(dst, &st, sizeof(st))) /* { dg-warning "potential exposure of sensitive information by copying uninitialized data from stack" "warning" { target { ! default_packed } } } */
+    /* { dg-message "3 bytes are uninitialized" "note how much" { target { ! default_packed } } .-1 } */
     return -EFAULT;
   return 0;
 }
diff --git a/gcc/testsuite/gcc.dg/plugin/infoleak-fixit-1.c b/gcc/testsuite/gcc.dg/plugin/infoleak-fixit-1.c
index 6961b44f76b9..192c9e7802ad 100644
--- a/gcc/testsuite/gcc.dg/plugin/infoleak-fixit-1.c
+++ b/gcc/testsuite/gcc.dg/plugin/infoleak-fixit-1.c
@@ -11,16 +11,18 @@ typedef unsigned int u32;
 
 struct st
 {
-  u8 i;  /* { dg-message "padding after field 'i' is uninitialized \\(3 bytes\\)" } */
+  u8 i;  /* { dg-message "padding after field 'i' is uninitialized \\(3 bytes\\)" "padding" { target { ! default_packed } } } */
   u32 j; /* { dg-message "field 'j' is uninitialized \\(4 bytes\\)" } */
 };
 
 void test (void __user *dst, u8 a)
 {
   struct st s; /* { dg-message "region created on stack here" "where" } */
-  /* { dg-message "capacity: 8 bytes" "capacity" { target *-*-* } .-1 } */
-  /* { dg-message "suggest forcing zero-initialization by providing a '.0.' initializer" "fix-it hint" { target *-*-* } .-2 } */  
+  /* { dg-message "capacity: 8 bytes" "capacity" { target { ! default_packed } } .-1 } */
+  /* { dg-message "capacity: 5 bytes" "capacity" { target default_packed } .-2 } */
+  /* { dg-message "suggest forcing zero-initialization by providing a '.0.' initializer" "fix-it hint" { target *-*-* } .-3 } */
   s.i = a;
   copy_to_user(dst, &s, sizeof (struct st)); /* { dg-warning "potential exposure of sensitive information by copying uninitialized data from stack" "warning" } */
-  /* { dg-message "7 bytes are uninitialized" "note how much" { target *-*-* } .-1 } */
+  /* { dg-message "7 bytes are uninitialized" "note how much" { target { ! default_packed } } .-1 } */
+  /* { dg-message "4 bytes are uninitialized" "note how much" { target default_packed } .-2 } */
 }
-- 
2.30.2


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-03-17 16:43 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-09 18:56 [PATCH] testsuite: Handle default_packed targets in gcc.dg/plugin Hans-Peter Nilsson
2023-03-16 15:29 ` Ping: " Hans-Peter Nilsson
2023-03-16 17:55 ` David Malcolm
2023-03-16 18:25   ` Hans-Peter Nilsson
2023-03-16 18:42     ` David Malcolm
2023-03-17 16:10       ` Hans-Peter Nilsson
2023-03-17 16:43         ` David Malcolm
2023-03-16 18:45     ` Hans-Peter Nilsson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).