From: Ondrej Zajicek Date: Thu, 28 Mar 2024 18:46:24 +0000 (+0100) Subject: Nest: Fix bitfield attributes X-Git-Tag: v3.0.0~257 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4036da3732220a5cd268e77f9505dfd5506cedb1;p=thirdparty%2Fbird.git Nest: Fix bitfield attributes Fix missing route lookup, causing crash when accessing route attribute. Also fix additional space in bitfield formatting. --- diff --git a/nest/rt-attr.c b/nest/rt-attr.c index 468b279d1..1df1f96dc 100644 --- a/nest/rt-attr.c +++ b/nest/rt-attr.c @@ -1248,6 +1248,7 @@ ea_list_unref(ea_list *l) void ea_format_bitfield(const struct eattr *a, byte *buf, int bufsize, const char **names, int min, int max) { + byte *start = buf; byte *bound = buf + bufsize - 32; u32 data = a->u.data; int i; @@ -1261,13 +1262,17 @@ ea_format_bitfield(const struct eattr *a, byte *buf, int bufsize, const char **n return; } - buf += bsprintf(buf, " %s", names[i]); + buf += bsprintf(buf, "%s ", names[i]); data &= ~(1u << i); } if (data) - bsprintf(buf, " %08x", data); + bsprintf(buf, "%08x ", data); + if (buf != start) + buf--; + + *buf = 0; return; } diff --git a/sysdep/linux/netlink.Y b/sysdep/linux/netlink.Y index 8e1c1921a..bf5f8b3be 100644 --- a/sysdep/linux/netlink.Y +++ b/sysdep/linux/netlink.Y @@ -54,7 +54,7 @@ attr_bit: KRT_FEATURE_ECN { $$ = f_new_dynamic_attr_bit(0, "krt_features"); } ; attr_bit: KRT_FEATURE_ALLFRAG { $$ = f_new_dynamic_attr_bit(3, "krt_features"); } ; /* Using attribute bits in filters (moved here to not confuse Bison on *BSD) */ -lvalue: attr_bit { $$ = (struct f_lval) { .type = F_LVAL_ATTR_BIT, .fab = $1 }; }; +lvalue: attr_bit { $$ = (struct f_lval) { .type = F_LVAL_ATTR_BIT, .fab = $1, .rte = f_new_inst(FI_CURRENT_ROUTE), }; }; CF_CODE