aboutsummaryrefslogtreecommitdiffstats
path: root/fs/compat.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/compat.c')
-rw-r--r--fs/compat.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/fs/compat.c b/fs/compat.c
index e04b4660db84..7c1615183d1e 100644
--- a/fs/compat.c
+++ b/fs/compat.c
@@ -1232,6 +1232,24 @@ compat_sys_readv(unsigned long fd, const struct compat_iovec __user *vec,
1232 return ret; 1232 return ret;
1233} 1233}
1234 1234
1235asmlinkage ssize_t
1236compat_sys_preadv(unsigned long fd, const struct compat_iovec __user *vec,
1237 unsigned long vlen, u32 pos_high, u32 pos_low)
1238{
1239 loff_t pos = ((loff_t)pos_high << 32) | pos_low;
1240 struct file *file;
1241 ssize_t ret;
1242
1243 if (pos < 0)
1244 return -EINVAL;
1245 file = fget(fd);
1246 if (!file)
1247 return -EBADF;
1248 ret = compat_readv(file, vec, vlen, &pos);
1249 fput(file);
1250 return ret;
1251}
1252
1235static size_t compat_writev(struct file *file, 1253static size_t compat_writev(struct file *file,
1236 const struct compat_iovec __user *vec, 1254 const struct compat_iovec __user *vec,
1237 unsigned long vlen, loff_t *pos) 1255 unsigned long vlen, loff_t *pos)
@@ -1269,6 +1287,24 @@ compat_sys_writev(unsigned long fd, const struct compat_iovec __user *vec,
1269 return ret; 1287 return ret;
1270} 1288}
1271 1289
1290asmlinkage ssize_t
1291compat_sys_pwritev(unsigned long fd, const struct compat_iovec __user *vec,
1292 unsigned long vlen, u32 pos_high, u32 pos_low)
1293{
1294 loff_t pos = ((loff_t)pos_high << 32) | pos_low;
1295 struct file *file;
1296 ssize_t ret;
1297
1298 if (pos < 0)
1299 return -EINVAL;
1300 file = fget(fd);
1301 if (!file)
1302 return -EBADF;
1303 ret = compat_writev(file, vec, vlen, &pos);
1304 fput(file);
1305 return ret;
1306}
1307
1272asmlinkage long 1308asmlinkage long
1273compat_sys_vmsplice(int fd, const struct compat_iovec __user *iov32, 1309compat_sys_vmsplice(int fd, const struct compat_iovec __user *iov32,
1274 unsigned int nr_segs, unsigned int flags) 1310 unsigned int nr_segs, unsigned int flags)