All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] fscrypt: Remove workaround for bug in gcc 7 and earlier
@ 2026-06-19  5:10 Eric Biggers
  0 siblings, 0 replies; only message in thread
From: Eric Biggers @ 2026-06-19  5:10 UTC (permalink / raw)
  To: linux-fscrypt; +Cc: linux-fsdevel, linux-kernel, Eric Biggers

Since the kernel's minimum gcc version is now 8.1, the workaround for a
strange gcc bug in fscrypt_ioctl_set_policy() is no longer needed.

Signed-off-by: Eric Biggers <ebiggers@kernel.org>
---
 fs/crypto/policy.c | 17 ++---------------
 1 file changed, 2 insertions(+), 15 deletions(-)

diff --git a/fs/crypto/policy.c b/fs/crypto/policy.c
index 9915e39362db..f40fb5924e75 100644
--- a/fs/crypto/policy.c
+++ b/fs/crypto/policy.c
@@ -505,36 +505,23 @@ static int set_encryption_policy(struct inode *inode,
 int fscrypt_ioctl_set_policy(struct file *filp, const void __user *arg)
 {
 	union fscrypt_policy policy;
 	union fscrypt_policy existing_policy;
 	struct inode *inode = file_inode(filp);
-	u8 version;
 	int size;
 	int ret;
 
 	if (get_user(policy.version, (const u8 __user *)arg))
 		return -EFAULT;
 
 	size = fscrypt_policy_size(&policy);
 	if (size <= 0)
 		return -EINVAL;
 
-	/*
-	 * We should just copy the remaining 'size - 1' bytes here, but a
-	 * bizarre bug in gcc 7 and earlier (fixed by gcc r255731) causes gcc to
-	 * think that size can be 0 here (despite the check above!) *and* that
-	 * it's a compile-time constant.  Thus it would think copy_from_user()
-	 * is passed compile-time constant ULONG_MAX, causing the compile-time
-	 * buffer overflow check to fail, breaking the build. This only occurred
-	 * when building an i386 kernel with -Os and branch profiling enabled.
-	 *
-	 * Work around it by just copying the first byte again...
-	 */
-	version = policy.version;
-	if (copy_from_user(&policy, arg, size))
+	if (copy_from_user((u8 *)&policy + 1, (const u8 __user *)arg + 1,
+			   size - 1))
 		return -EFAULT;
-	policy.version = version;
 
 	if (!inode_owner_or_capable(&nop_mnt_idmap, inode))
 		return -EACCES;
 
 	ret = mnt_want_write_file(filp);

base-commit: 83f1454877cc292b88baf13c829c16ce6937d120
-- 
2.54.0


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-06-19  5:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-19  5:10 [PATCH] fscrypt: Remove workaround for bug in gcc 7 and earlier Eric Biggers

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.