Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 859d880c authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

signal: Correct the offset of si_pkey in struct siginfo



The change moving addr_lsb into the _sigfault union failed to take
into account that _sigfault._addr_bnd._lower being a pointer forced
the entire union to have pointer alignment.  In practice this only
mattered for the offset of si_pkey which is why this has taken so long
to discover.

To correct this change _dummy_pkey and _dummy_bnd to have pointer type.

Reported-by: default avatarkernel test robot <shun.hao@intel.com>
Fixes: b68a68d3 ("signal: Move addr_lsb into the _sigfault union for clarity")
Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
parent 9026e820
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -229,13 +229,13 @@ typedef struct compat_siginfo {
				short int _addr_lsb;	/* Valid LSB of the reported address. */
				/* used when si_code=SEGV_BNDERR */
				struct {
					short _dummy_bnd;
					compat_uptr_t _dummy_bnd;
					compat_uptr_t _lower;
					compat_uptr_t _upper;
				} _addr_bnd;
				/* used when si_code=SEGV_PKUERR */
				struct {
					short _dummy_pkey;
					compat_uptr_t _dummy_pkey;
					u32 _pkey;
				} _addr_pkey;
			};
+2 −2
Original line number Diff line number Diff line
@@ -102,13 +102,13 @@ typedef struct siginfo {
				short _addr_lsb; /* LSB of the reported address */
				/* used when si_code=SEGV_BNDERR */
				struct {
					short _dummy_bnd;
					void *_dummy_bnd;
					void __user *_lower;
					void __user *_upper;
				} _addr_bnd;
				/* used when si_code=SEGV_PKUERR */
				struct {
					short _dummy_pkey;
					void *_dummy_pkey;
					__u32 _pkey;
				} _addr_pkey;
			};