forked from Minki/linux
[ARM] 3108/2: old ABI compat: statfs64 and fstatfs64
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>
This commit is contained in:
parent
704bdda038
commit
713c481519
@ -280,8 +280,8 @@ __syscall_start:
|
|||||||
.long sys_clock_gettime
|
.long sys_clock_gettime
|
||||||
.long sys_clock_getres
|
.long sys_clock_getres
|
||||||
/* 265 */ .long sys_clock_nanosleep
|
/* 265 */ .long sys_clock_nanosleep
|
||||||
.long sys_statfs64
|
.long sys_statfs64_wrapper
|
||||||
.long sys_fstatfs64
|
.long sys_fstatfs64_wrapper
|
||||||
.long sys_tgkill
|
.long sys_tgkill
|
||||||
.long sys_utimes
|
.long sys_utimes
|
||||||
/* 270 */ .long sys_arm_fadvise64_64
|
/* 270 */ .long sys_arm_fadvise64_64
|
||||||
|
@ -262,6 +262,16 @@ sys_sigaltstack_wrapper:
|
|||||||
ldr r2, [sp, #S_OFF + S_SP]
|
ldr r2, [sp, #S_OFF + S_SP]
|
||||||
b do_sigaltstack
|
b do_sigaltstack
|
||||||
|
|
||||||
|
sys_statfs64_wrapper:
|
||||||
|
teq r1, #88
|
||||||
|
moveq r1, #84
|
||||||
|
b sys_statfs64
|
||||||
|
|
||||||
|
sys_fstatfs64_wrapper:
|
||||||
|
teq r1, #88
|
||||||
|
moveq r1, #84
|
||||||
|
b sys_fstatfs64
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Note: off_4k (r5) is always units of 4K. If we can't do the requested
|
* Note: off_4k (r5) is always units of 4K. If we can't do the requested
|
||||||
* offset, we return EINVAL.
|
* offset, we return EINVAL.
|
||||||
|
@ -1,6 +1,42 @@
|
|||||||
#ifndef _ASMARM_STATFS_H
|
#ifndef _ASMARM_STATFS_H
|
||||||
#define _ASMARM_STATFS_H
|
#define _ASMARM_STATFS_H
|
||||||
|
|
||||||
#include <asm-generic/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
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user