Skip to content

Commit ad6d455

Browse files
committed
9p/net: return error on bogus (longer than requested) replies
Up until now we've been considering longer than requested replies as acceptable, printing a message and just truncating the data, but it makes more sense to consider these an error. Make these fail with EIO instead. Suggested-by: Christian Schoenebeck <linux_oss@crudebyte.com> Message-ID: <20250317-p9_bogus_io_error-v1-1-9639f6d1561f@codewreck.org> Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
1 parent d0259a8 commit ad6d455

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

net/9p/client.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1594,7 +1594,9 @@ p9_client_read_once(struct p9_fid *fid, u64 offset, struct iov_iter *to,
15941594
}
15951595
if (rsize < received) {
15961596
pr_err("bogus RREAD count (%u > %u)\n", received, rsize);
1597-
received = rsize;
1597+
*err = -EIO;
1598+
p9_req_put(clnt, req);
1599+
return 0;
15981600
}
15991601

16001602
p9_debug(P9_DEBUG_9P, "<<< RREAD count %u\n", received);
@@ -1661,7 +1663,10 @@ p9_client_write(struct p9_fid *fid, u64 offset, struct iov_iter *from, int *err)
16611663
}
16621664
if (rsize < written) {
16631665
pr_err("bogus RWRITE count (%u > %u)\n", written, rsize);
1664-
written = rsize;
1666+
*err = -EIO;
1667+
iov_iter_revert(from, count - iov_iter_count(from));
1668+
p9_req_put(clnt, req);
1669+
break;
16651670
}
16661671

16671672
p9_debug(P9_DEBUG_9P, "<<< RWRITE count %u\n", written);
@@ -1713,7 +1718,7 @@ p9_client_write_subreq(struct netfs_io_subrequest *subreq)
17131718

17141719
if (written > len) {
17151720
pr_err("bogus RWRITE count (%d > %u)\n", written, len);
1716-
written = len;
1721+
written = -EIO;
17171722
}
17181723

17191724
p9_debug(P9_DEBUG_9P, "<<< RWRITE count %d\n", len);
@@ -2145,7 +2150,8 @@ int p9_client_readdir(struct p9_fid *fid, char *data, u32 count, u64 offset)
21452150
}
21462151
if (rsize < count) {
21472152
pr_err("bogus RREADDIR count (%u > %u)\n", count, rsize);
2148-
count = rsize;
2153+
err = -EIO;
2154+
goto free_and_error;
21492155
}
21502156

21512157
p9_debug(P9_DEBUG_9P, "<<< RREADDIR count %u\n", count);

0 commit comments

Comments
 (0)