[CRIU] [PATCH] tests: do not try to read more than packet in AutoFS test
Stanislav Kinsburskiy
skinsbursky at virtuozzo.com
Wed Sep 13 14:35:06 MSK 2017
The intention was to make sure, that only one packet is sent at a time.
And thus read has to return exactly the size of one packet.
But it doesnt' work as expected, because size of autofs_v5_packet_union
differs on 32 bit and 64 bit architectures.
This is a bug, but it's hidden so deeply, that no one really cares by the
following 2 aspects:
1) Autofs pipe has O_DIRECT flag, which means excess bytes will be discarded
upon read.
2) No one tries to read more than one packet size at a time.
So let's fix the test instead and do not try to read more bytes, than
expected.
Signed-off-by: Stanislav Kinsburskiy <skinsbursky at virtuozzo.com>
Signed-off-by: Cyrill Gorcunov <gorcunov at virtuozzo.com>
---
test/zdtm/static/autofs.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/test/zdtm/static/autofs.c b/test/zdtm/static/autofs.c
index 747ab69..ae78538 100644
--- a/test/zdtm/static/autofs.c
+++ b/test/zdtm/static/autofs.c
@@ -460,7 +460,7 @@ static int automountd_loop(int pipe, const char *mountpoint, struct autofs_param
{
union autofs_v5_packet_union *packet;
ssize_t bytes;
- size_t psize = sizeof(*packet) + 1;
+ size_t psize = sizeof(*packet);
int err = 0;
packet = malloc(psize);
@@ -473,7 +473,7 @@ static int automountd_loop(int pipe, const char *mountpoint, struct autofs_param
siginterrupt(SIGUSR2, 1);
while (!stop && !err) {
- memset(packet, 0, sizeof(*packet));
+ memset(packet, 0, psize);
bytes = read(pipe, packet, psize);
if (bytes < 0) {
@@ -483,12 +483,9 @@ static int automountd_loop(int pipe, const char *mountpoint, struct autofs_param
}
continue;
}
- if (bytes == psize) {
- pr_err("read more that expected\n");
- return -EINVAL;
- }
- if (bytes != sizeof(*packet)) {
- pr_err("read less than expected: %zd\n", bytes);
+ if (bytes != psize) {
+ pr_err("read less than expected: %zd < %zd\n",
+ bytes, psize);
return -EINVAL;
}
err = automountd_serve(mountpoint, param, packet);
More information about the CRIU
mailing list