Patch from Nicolas Pitre struct statfs64 has extra padding with EABI growing its size from 84 to 88. This struct is now __attribute__((packed,aligned(4))) with a small assembly wrapper to force the sz argument to 84 if it is 88 to avoid copying the extra padding over user space memory unexpecting it. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			823 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			823 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef _ASMARM_STATFS_H
 | 
						|
#define _ASMARM_STATFS_H
 | 
						|
 | 
						|
#ifndef __KERNEL_STRICT_NAMES
 | 
						|
# include <linux/types.h>
 | 
						|
typedef __kernel_fsid_t	fsid_t;
 | 
						|
#endif
 | 
						|
 | 
						|
struct statfs {
 | 
						|
	__u32 f_type;
 | 
						|
	__u32 f_bsize;
 | 
						|
	__u32 f_blocks;
 | 
						|
	__u32 f_bfree;
 | 
						|
	__u32 f_bavail;
 | 
						|
	__u32 f_files;
 | 
						|
	__u32 f_ffree;
 | 
						|
	__kernel_fsid_t f_fsid;
 | 
						|
	__u32 f_namelen;
 | 
						|
	__u32 f_frsize;
 | 
						|
	__u32 f_spare[5];
 | 
						|
};
 | 
						|
 | 
						|
/*
 | 
						|
 * With EABI there is 4 bytes of padding added to this structure.
 | 
						|
 * Let's pack it so the padding goes away to simplify dual ABI support.
 | 
						|
 * Note that user space does NOT have to pack this structure.
 | 
						|
 */
 | 
						|
struct statfs64 {
 | 
						|
	__u32 f_type;
 | 
						|
	__u32 f_bsize;
 | 
						|
	__u64 f_blocks;
 | 
						|
	__u64 f_bfree;
 | 
						|
	__u64 f_bavail;
 | 
						|
	__u64 f_files;
 | 
						|
	__u64 f_ffree;
 | 
						|
	__kernel_fsid_t f_fsid;
 | 
						|
	__u32 f_namelen;
 | 
						|
	__u32 f_frsize;
 | 
						|
	__u32 f_spare[5];
 | 
						|
} __attribute__ ((packed,aligned(4)));
 | 
						|
 | 
						|
#endif
 |