Skip to contentSkip to conversation

vfs: fix preadv64v2 and pwritev64v2 compat syscalls with offset == -1

PATCH Applied Aurelien Jarno 2 participants 4 messages Dec 6, 2018 – Feb 16, 2019 VFS

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 vfs: fix preadv64v2 and pwritev64v2 compat syscalls with offset == -1

The preadv2 and pwritev2 syscalls are supposed to emulate the readv and writev syscalls when offset == -1. Therefore the compat code should check for offset before calling do_compat_preadv64 and do_compat_pwritev64. This is the case for the preadv2 and pwritev2 syscalls, but handling of offset == -1 is missing in their 64-bit equivalent.

This patch fixes that, calling do_compat_readv and do_compat_writev when offset == -1. This fixes the following glibc tests on x32:
- misc/tst-preadvwritev2
- misc/tst-preadvwritev64v2

---
 fs/read_write.c | 6 ++++++
 1 file changed, 6 insertions(+)
fs/read_write.c +6 -0
index 4dae0399c75a..c2dd3737fea2 100644
@@ -1241,6 +1241,9 @@ COMPAT_SYSCALL_DEFINE5(preadv64v2, unsigned long, fd,
 		const struct compat_iovec __user *,vec,
 		unsigned long, vlen, loff_t, pos, rwf_t, flags)
 {
+	if (pos == -1)
+		return do_compat_readv(fd, vec, vlen, flags);
+
 	return do_compat_preadv64(fd, vec, vlen, pos, flags);
 }
 #endif
@@ -1347,6 +1350,9 @@ COMPAT_SYSCALL_DEFINE5(pwritev64v2, unsigned long, fd,
 		const struct compat_iovec __user *,vec,
 		unsigned long, vlen, loff_t, pos, rwf_t, flags)
 {
+	if (pos == -1)
+		return do_compat_writev(fd, vec, vlen, flags);
+
 	return do_compat_pwritev64(fd, vec, vlen, pos, flags);
 }
 #endif
Signature · 1 line
2.19.1
#1 lore raw
Quoted 12 lines · Aurelien Jarno

The preadv2 and pwritev2 syscalls are supposed to emulate the readv and writev syscalls when offset == -1. Therefore the compat code should check for offset before calling do_compat_preadv64 and do_compat_pwritev64. This is the case for the preadv2 and pwritev2 syscalls, but handling of offset == -1 is missing in their 64-bit equivalent.

This patch fixes that, calling do_compat_readv and do_compat_writev when offset == -1. This fixes the following glibc tests on x32:
- misc/tst-preadvwritev2
- misc/tst-preadvwritev64v2

Quoted 6 lines
---
 fs/read_write.c | 6 ++++++
 1 file changed, 6 insertions(+)

Any news about this patch?

Thanks,
Aurelien

Signature · 2 lines
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
[email protected]                 http://www.aurel32.net
#2 lore raw
Quoted 13 lines · Aurelien Jarno
Quoted 12 lines · Aurelien Jarno

The preadv2 and pwritev2 syscalls are supposed to emulate the readv and writev syscalls when offset == -1. Therefore the compat code should check for offset before calling do_compat_preadv64 and do_compat_pwritev64. This is the case for the preadv2 and pwritev2 syscalls, but handling of offset == -1 is missing in their 64-bit equivalent.

This patch fixes that, calling do_compat_readv and do_compat_writev when offset == -1. This fixes the following glibc tests on x32:
- misc/tst-preadvwritev2
- misc/tst-preadvwritev64v2

Quoted 9 lines
Quoted 6 lines
---
 fs/read_write.c | 6 ++++++
 1 file changed, 6 insertions(+)

Any news about this patch?

Ping.

Aurelien

Signature · 2 lines
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
[email protected]                 http://www.aurel32.net
maintainer Applied
#3 lore raw
Quoted 21 lines · Aurelien Jarno
Quoted 20 lines · Aurelien Jarno
Quoted 18 lines · Aurelien Jarno

The preadv2 and pwritev2 syscalls are supposed to emulate the readv and writev syscalls when offset == -1. Therefore the compat code should check for offset before calling do_compat_preadv64 and do_compat_pwritev64. This is the case for the preadv2 and pwritev2 syscalls, but handling of offset == -1 is missing in their 64-bit equivalent.

This patch fixes that, calling do_compat_readv and do_compat_writev when offset == -1. This fixes the following glibc tests on x32:
- misc/tst-preadvwritev2
- misc/tst-preadvwritev64v2

---
 fs/read_write.c | 6 ++++++
 1 file changed, 6 insertions(+)
Quoted 4 lines
Quoted 2 lines

Any news about this patch?

Ping.

Applied