summaryrefslogtreecommitdiff
path: root/lib9p/9p.generated.c
diff options
context:
space:
mode:
authorLuke T. Shumaker <lukeshu@lukeshu.com>2025-02-03 20:31:44 -0700
committerLuke T. Shumaker <lukeshu@lukeshu.com>2025-02-03 21:02:59 -0700
commit652098de8dce01af90a65e0efa48dc156abc6329 (patch)
treec89aeea10fb14df0489084d13775d3f391bcd3c2 /lib9p/9p.generated.c
parentae610c5796cb1624f03b79dfae372c757674ea76 (diff)
lib9p: idl.gen: Simplify special cases
It wasn't validating d_signed length.
Diffstat (limited to 'lib9p/9p.generated.c')
-rw-r--r--lib9p/9p.generated.c59
1 files changed, 30 insertions, 29 deletions
diff --git a/lib9p/9p.generated.c b/lib9p/9p.generated.c
index 8e3e26b..a166fb2 100644
--- a/lib9p/9p.generated.c
+++ b/lib9p/9p.generated.c
@@ -354,10 +354,10 @@ LM_ALWAYS_INLINE static bool _validate_list(struct _validate_ctx *ctx,
return false;
}
-#define validate_1(ctx) _validate_size_net(ctx, 1)
-#define validate_2(ctx) _validate_size_net(ctx, 2)
-#define validate_4(ctx) _validate_size_net(ctx, 4)
-#define validate_8(ctx) _validate_size_net(ctx, 8)
+LM_ALWAYS_INLINE static bool validate_1(struct _validate_ctx *ctx) { return _validate_size_net(ctx, 1); }
+LM_ALWAYS_INLINE static bool validate_2(struct _validate_ctx *ctx) { return _validate_size_net(ctx, 2); }
+LM_ALWAYS_INLINE static bool validate_4(struct _validate_ctx *ctx) { return _validate_size_net(ctx, 4); }
+LM_ALWAYS_INLINE static bool validate_8(struct _validate_ctx *ctx) { return _validate_size_net(ctx, 8); }
#if CONFIG_9P_ENABLE_9P2000 || CONFIG_9P_ENABLE_9P2000_L || CONFIG_9P_ENABLE_9P2000_e || CONFIG_9P_ENABLE_9P2000_u
LM_ALWAYS_INLINE static bool validate_tag(struct _validate_ctx *ctx) {
@@ -369,31 +369,30 @@ LM_ALWAYS_INLINE static bool validate_fid(struct _validate_ctx *ctx) {
}
LM_ALWAYS_INLINE static bool validate_d(struct _validate_ctx *ctx) {
- uint32_t base_offset = ctx->net_offset;
- if (validate_4(ctx))
- return true;
- uint32_t len = uint32le_decode(&ctx->net_bytes[base_offset]);
- return _validate_size_net(ctx, len) || _validate_size_host(ctx, len);
+ uint32_t len;
+ return false
+ || (validate_4(ctx) || ({ len = uint32le_decode(&ctx->net_bytes[ctx->net_offset-4]); false; }))
+ || _validate_list(ctx, len, validate_1, sizeof(uint8_t))
+ ;
}
LM_ALWAYS_INLINE static bool validate_d_signed(struct _validate_ctx *ctx) {
- uint32_t base_offset = ctx->net_offset;
- if (validate_4(ctx))
- return true;
- uint32_t len = uint32le_decode(&ctx->net_bytes[base_offset]);
- return _validate_size_net(ctx, len) || _validate_size_host(ctx, len);
+ uint32_t len;
+ return false
+ || (validate_4(ctx) || ({ len = uint32le_decode(&ctx->net_bytes[ctx->net_offset-4]); false; }))
+ || _validate_list(ctx, len, validate_1, sizeof(uint8_t))
+ || ({ uint32_t max = INT32_MAX; (((uint32_t)len) > max) &&
+ lib9p_errorf(ctx->ctx, LINUX_EBADMSG, "len value is too large (%"PRIu32" > %"PRIu32")", len, max); })
+ ;
}
LM_ALWAYS_INLINE static bool validate_s(struct _validate_ctx *ctx) {
- uint32_t base_offset = ctx->net_offset;
- if (validate_2(ctx))
- return true;
- uint16_t len = uint16le_decode(&ctx->net_bytes[base_offset]);
- if (_validate_size_net(ctx, len) || _validate_size_host(ctx, ((size_t)len)))
- return true;
- if (!is_valid_utf8_without_nul(&ctx->net_bytes[base_offset+2], len))
- return lib9p_error(ctx->ctx, LINUX_EBADMSG, "message contains invalid UTF-8");
- return false;
+ uint16_t len;
+ return false
+ || (validate_2(ctx) || ({ len = uint16le_decode(&ctx->net_bytes[ctx->net_offset-2]); false; }))
+ || _validate_list(ctx, len, validate_1, sizeof(uint8_t))
+ || ({ (!is_valid_utf8_without_nul(&ctx->net_bytes[ctx->net_offset-len], len)) && lib9p_error(ctx->ctx, LINUX_EBADMSG, "message contains invalid UTF-8"); })
+ ;
}
#endif /* CONFIG_9P_ENABLE_9P2000 || CONFIG_9P_ENABLE_9P2000_L || CONFIG_9P_ENABLE_9P2000_e || CONFIG_9P_ENABLE_9P2000_u */
@@ -1086,7 +1085,7 @@ LM_FLATTEN static bool validate_Twalk(struct _validate_ctx *ctx) {
|| validate_fid(ctx)
|| validate_fid(ctx)
|| (validate_2(ctx) || ({ nwname = uint16le_decode(&ctx->net_bytes[ctx->net_offset-2]); false; }))
- || _validate_list(ctx, uint16le_decode(&ctx->net_bytes[ctx->net_offset-2]), validate_s, sizeof(struct lib9p_s))
+ || _validate_list(ctx, nwname, validate_s, sizeof(struct lib9p_s))
|| ({ uint32_t exp = ctx->net_offset - _size_offset; (((uint32_t)size) != exp) &&
lib9p_errorf(ctx->ctx, LINUX_EBADMSG, "size value is wrong (actual:%"PRIu32" != correct:%"PRIu32")", (uint32_t)size, exp); })
|| ({ uint8_t exp = 110; (((uint8_t)typ) != exp) &&
@@ -1270,14 +1269,15 @@ LM_FLATTEN static bool validate_Tunlinkat(struct _validate_ctx *ctx) {
LM_FLATTEN static bool validate_Tsread(struct _validate_ctx *ctx) {
uint32_t size;
uint8_t typ;
+ uint16_t nwname;
uint32_t _size_offset;
return false
|| (({ _size_offset = ctx->net_offset; validate_4(ctx); }) || ({ size = uint32le_decode(&ctx->net_bytes[ctx->net_offset-4]); false; }))
|| (validate_1(ctx) || ({ typ = ctx->net_bytes[ctx->net_offset-1]; false; }))
|| validate_tag(ctx)
|| validate_4(ctx)
- || validate_2(ctx)
- || _validate_list(ctx, uint16le_decode(&ctx->net_bytes[ctx->net_offset-2]), validate_s, sizeof(struct lib9p_s))
+ || (validate_2(ctx) || ({ nwname = uint16le_decode(&ctx->net_bytes[ctx->net_offset-2]); false; }))
+ || _validate_list(ctx, nwname, validate_s, sizeof(struct lib9p_s))
|| ({ uint32_t exp = ctx->net_offset - _size_offset; (((uint32_t)size) != exp) &&
lib9p_errorf(ctx->ctx, LINUX_EBADMSG, "size value is wrong (actual:%"PRIu32" != correct:%"PRIu32")", (uint32_t)size, exp); })
|| ({ uint8_t exp = 152; (((uint8_t)typ) != exp) &&
@@ -1288,14 +1288,15 @@ LM_FLATTEN static bool validate_Tsread(struct _validate_ctx *ctx) {
LM_FLATTEN static bool validate_Tswrite(struct _validate_ctx *ctx) {
uint32_t size;
uint8_t typ;
+ uint16_t nwname;
uint32_t _size_offset;
return false
|| (({ _size_offset = ctx->net_offset; validate_4(ctx); }) || ({ size = uint32le_decode(&ctx->net_bytes[ctx->net_offset-4]); false; }))
|| (validate_1(ctx) || ({ typ = ctx->net_bytes[ctx->net_offset-1]; false; }))
|| validate_tag(ctx)
|| validate_4(ctx)
- || validate_2(ctx)
- || _validate_list(ctx, uint16le_decode(&ctx->net_bytes[ctx->net_offset-2]), validate_s, sizeof(struct lib9p_s))
+ || (validate_2(ctx) || ({ nwname = uint16le_decode(&ctx->net_bytes[ctx->net_offset-2]); false; }))
+ || _validate_list(ctx, nwname, validate_s, sizeof(struct lib9p_s))
|| validate_d(ctx)
|| ({ uint32_t exp = ctx->net_offset - _size_offset; (((uint32_t)size) != exp) &&
lib9p_errorf(ctx->ctx, LINUX_EBADMSG, "size value is wrong (actual:%"PRIu32" != correct:%"PRIu32")", (uint32_t)size, exp); })
@@ -1631,7 +1632,7 @@ LM_FLATTEN static bool validate_Rwalk(struct _validate_ctx *ctx) {
|| (validate_1(ctx) || ({ typ = ctx->net_bytes[ctx->net_offset-1]; false; }))
|| validate_tag(ctx)
|| (validate_2(ctx) || ({ nwqid = uint16le_decode(&ctx->net_bytes[ctx->net_offset-2]); false; }))
- || _validate_list(ctx, uint16le_decode(&ctx->net_bytes[ctx->net_offset-2]), validate_qid, sizeof(struct lib9p_qid))
+ || _validate_list(ctx, nwqid, validate_qid, sizeof(struct lib9p_qid))
|| ({ uint32_t exp = ctx->net_offset - _size_offset; (((uint32_t)size) != exp) &&
lib9p_errorf(ctx->ctx, LINUX_EBADMSG, "size value is wrong (actual:%"PRIu32" != correct:%"PRIu32")", (uint32_t)size, exp); })
|| ({ uint8_t exp = 111; (((uint8_t)typ) != exp) &&