From e1994d3d3f2bb80d039d0db567706e0739161e79 Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Sun, 12 Jan 2025 21:10:34 -0700 Subject: lib9p: Limit count and offset to INT{32,64}_MAX --- lib9p/idl/2002-9P2000.9p | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'lib9p/idl/2002-9P2000.9p') diff --git a/lib9p/idl/2002-9P2000.9p b/lib9p/idl/2002-9P2000.9p index c83f439..4b0738f 100644 --- a/lib9p/idl/2002-9P2000.9p +++ b/lib9p/idl/2002-9P2000.9p @@ -1,6 +1,6 @@ # lib9p/idl/2002-9P2000.9p - Definitions of 9P2000 messages # -# Copyright (C) 2024 Luke T. Shumaker +# Copyright (C) 2024-2025 Luke T. Shumaker # SPDX-License-Identifier: AGPL-3.0-or-later # "9P2000" base protocol @@ -9,11 +9,14 @@ # # But due to incompleteness of the draft RFC, the Plan 9 manual # section-5 and the Plan 9 headers (particularly fcall.h) are often -# better references. +# better references. The s{32,64}_max limitations are not documented +# in the draft RFC or the manual pages, but have been enforced by +# lib9p/srv.c in every release of Plan 9 4e. # # https://github.com/plan9foundation/plan9/tree/main/sys/man/5 # https://man.cat-v.org/plan_9/5/ # https://github.com/plan9foundation/plan9/blob/main/sys/include/fcall.h +# https://github.com/plan9foundation/plan9/blob/main/sys/src/lib9p/srv.c version "9P2000" # tag - identify a request/response pair @@ -22,8 +25,8 @@ num tag = 2 # file identifier - like a UNIX file-descriptor num fid = 4 -# data - u32le `n`, then `n` bytes of data -struct d = "len[4] len*(dat[1])" +# data - s32le `n`, then `n` bytes of data +struct d = "len[4,max=s32_max] len*(dat[1])" # string - u16le `n`, then `n` bytes of UTF-8, without any nul-bytes struct s = "len[2] len*(utf8[1])" @@ -136,9 +139,9 @@ msg Topen = "size[4,val=end-&size] typ[1,val=112] tag[tag] fid[fid] mode[o]" msg Ropen = "size[4,val=end-&size] typ[1,val=113] tag[tag] qid[qid] iounit[4]" msg Tcreate = "size[4,val=end-&size] typ[1,val=114] tag[tag] fid[fid] name[s] perm[dm] mode[o]" msg Rcreate = "size[4,val=end-&size] typ[1,val=115] tag[tag] qid[qid] iounit[4]" -msg Tread = "size[4,val=end-&size] typ[1,val=116] tag[tag] fid[fid] offset[8] count[4]" +msg Tread = "size[4,val=end-&size] typ[1,val=116] tag[tag] fid[fid] offset[8,max=s64_max] count[4,max=s32_max]" msg Rread = "size[4,val=end-&size] typ[1,val=117] tag[tag] data[d]" # for directories `data` is the sequence "cnt*(entries[stat])" -msg Twrite = "size[4,val=end-&size] typ[1,val=118] tag[tag] fid[fid] offset[8] data[d]" +msg Twrite = "size[4,val=end-&size] typ[1,val=118] tag[tag] fid[fid] offset[8,max=s64_max] data[d]" msg Rwrite = "size[4,val=end-&size] typ[1,val=119] tag[tag] count[4]" msg Tclunk = "size[4,val=end-&size] typ[1,val=120] tag[tag] fid[fid]" msg Rclunk = "size[4,val=end-&size] typ[1,val=121] tag[tag]" -- cgit v1.2.3-2-g168b From 7f4b9794efb591c9de9906340fe2c26c838c2f52 Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Tue, 14 Jan 2025 19:26:13 -0700 Subject: lib9p: idl: Add numeric constants --- lib9p/idl/2002-9P2000.9p | 2 ++ 1 file changed, 2 insertions(+) (limited to 'lib9p/idl/2002-9P2000.9p') diff --git a/lib9p/idl/2002-9P2000.9p b/lib9p/idl/2002-9P2000.9p index 4b0738f..c1cd74b 100644 --- a/lib9p/idl/2002-9P2000.9p +++ b/lib9p/idl/2002-9P2000.9p @@ -21,9 +21,11 @@ version "9P2000" # tag - identify a request/response pair num tag = 2 + "NOTAG = ~0" # file identifier - like a UNIX file-descriptor num fid = 4 + "NOFID = ~0" # data - s32le `n`, then `n` bytes of data struct d = "len[4,max=s32_max] len*(dat[1])" -- cgit v1.2.3-2-g168b