All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kees Cook <keescook@chromium.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, Manfred Spraul <manfred@colorfullife.com>
Subject: [PATCH] ipc: Fail build if IPC structures change layout
Date: Fri, 19 May 2017 16:44:00 -0700	[thread overview]
Message-ID: <20170519234400.GA47946@beast> (raw)

Since struct layout can be seen at build-time, turn runtime report
into a build failure so it can be fixed more quickly.

Cc: Manfred Spraul <manfred@colorfullife.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
---
Should be applied on top of the -mm tree's IPC changes
---
 ipc/msg.c | 5 +----
 ipc/sem.c | 5 +----
 ipc/shm.c | 5 +----
 3 files changed, 3 insertions(+), 12 deletions(-)

diff --git a/ipc/msg.c b/ipc/msg.c
index e9785c4d2e0d..0ed7dae7d4e8 100644
--- a/ipc/msg.c
+++ b/ipc/msg.c
@@ -118,10 +118,7 @@ static int newque(struct ipc_namespace *ns, struct ipc_params *params)
 	key_t key = params->key;
 	int msgflg = params->flg;
 
-	if (offsetof(struct msg_queue, q_perm) != 0) {
-		pr_err("Invalid struct sem_perm, failing msgget().\n");
-		return -ENOMEM;
-	}
+	BUILD_BUG_ON(offsetof(struct msg_queue, q_perm) != 0);
 
 	msq = container_of(ipc_rcu_alloc(sizeof(*msq)), struct msg_queue,
 				q_perm);
diff --git a/ipc/sem.c b/ipc/sem.c
index 18241c16d07c..2109fad750b5 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -469,10 +469,7 @@ static int newary(struct ipc_namespace *ns, struct ipc_params *params)
 	if (ns->used_sems + nsems > ns->sc_semmns)
 		return -ENOSPC;
 
-	if (offsetof(struct sem_array, sem_perm) != 0) {
-		pr_err("Invalid struct sem_perm, failing semget().\n");
-		return -ENOMEM;
-	}
+	BUILD_BUG_ON(offsetof(struct sem_array, sem_perm) != 0);
 
 	size = sizeof(*sma) + nsems * sizeof(sma->sems[0]);
 	sma = container_of(ipc_rcu_alloc(size), struct sem_array, sem_perm);
diff --git a/ipc/shm.c b/ipc/shm.c
index cec6df186050..2eb85bd5b855 100644
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -543,10 +543,7 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params)
 			ns->shm_tot + numpages > ns->shm_ctlall)
 		return -ENOSPC;
 
-	if (offsetof(struct shmid_kernel, shm_perm) != 0) {
-		pr_err("Invalid struct sem_perm, failing msgget().\n");
-		return -ENOMEM;
-	}
+	BUILD_BUG_ON(offsetof(struct shmid_kernel, shm_perm) != 0);
 
 	shp = container_of(ipc_rcu_alloc(sizeof(*shp)), struct shmid_kernel,
 				shm_perm);
-- 
2.7.4


-- 
Kees Cook
Pixel Security

             reply	other threads:[~2017-05-19 23:44 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-19 23:44 Kees Cook [this message]
2017-05-22 21:44 ` [PATCH] ipc: Fail build if IPC structures change layout Andrew Morton

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170519234400.GA47946@beast \
    --to=keescook@chromium.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=manfred@colorfullife.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.