forked from mirrors/linux
		
	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: kernel test robot <shun.hao@intel.com>
Fixes: b68a68d3dc ("signal: Move addr_lsb into the _sigfault union for clarity")
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
			
			
This commit is contained in:
		
							parent
							
								
									9026e820cb
								
							
						
					
					
						commit
						859d880cf5
					
				
					 2 changed files with 4 additions and 4 deletions
				
			
		|  | @ -229,13 +229,13 @@ typedef struct compat_siginfo { | ||||||
| 				short int _addr_lsb;	/* Valid LSB of the reported address. */ | 				short int _addr_lsb;	/* Valid LSB of the reported address. */ | ||||||
| 				/* used when si_code=SEGV_BNDERR */ | 				/* used when si_code=SEGV_BNDERR */ | ||||||
| 				struct { | 				struct { | ||||||
| 					short _dummy_bnd; | 					compat_uptr_t _dummy_bnd; | ||||||
| 					compat_uptr_t _lower; | 					compat_uptr_t _lower; | ||||||
| 					compat_uptr_t _upper; | 					compat_uptr_t _upper; | ||||||
| 				} _addr_bnd; | 				} _addr_bnd; | ||||||
| 				/* used when si_code=SEGV_PKUERR */ | 				/* used when si_code=SEGV_PKUERR */ | ||||||
| 				struct { | 				struct { | ||||||
| 					short _dummy_pkey; | 					compat_uptr_t _dummy_pkey; | ||||||
| 					u32 _pkey; | 					u32 _pkey; | ||||||
| 				} _addr_pkey; | 				} _addr_pkey; | ||||||
| 			}; | 			}; | ||||||
|  |  | ||||||
|  | @ -102,13 +102,13 @@ typedef struct siginfo { | ||||||
| 				short _addr_lsb; /* LSB of the reported address */ | 				short _addr_lsb; /* LSB of the reported address */ | ||||||
| 				/* used when si_code=SEGV_BNDERR */ | 				/* used when si_code=SEGV_BNDERR */ | ||||||
| 				struct { | 				struct { | ||||||
| 					short _dummy_bnd; | 					void *_dummy_bnd; | ||||||
| 					void __user *_lower; | 					void __user *_lower; | ||||||
| 					void __user *_upper; | 					void __user *_upper; | ||||||
| 				} _addr_bnd; | 				} _addr_bnd; | ||||||
| 				/* used when si_code=SEGV_PKUERR */ | 				/* used when si_code=SEGV_PKUERR */ | ||||||
| 				struct { | 				struct { | ||||||
| 					short _dummy_pkey; | 					void *_dummy_pkey; | ||||||
| 					__u32 _pkey; | 					__u32 _pkey; | ||||||
| 				} _addr_pkey; | 				} _addr_pkey; | ||||||
| 			}; | 			}; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Eric W. Biederman
						Eric W. Biederman