Page MenuHomeFreeBSD

D47552.diff
No OneTemporary

D47552.diff

diff --git a/sys/netlink/netlink_message_writer.h b/sys/netlink/netlink_message_writer.h
--- a/sys/netlink/netlink_message_writer.h
+++ b/sys/netlink/netlink_message_writer.h
@@ -214,93 +214,95 @@
}
#define nlmsg_reserve_attr(_ns, _at, _t) ((_t *)_nlmsg_reserve_attr(_ns, _at, NLA_ALIGN(sizeof(_t))))
-bool nlattr_add(struct nl_writer *nw, int attr_type, int attr_len,
+bool nlattr_add(struct nl_writer *nw, uint16_t attr_type, uint16_t attr_len,
const void *data);
static inline bool
nlattr_add_raw(struct nl_writer *nw, const struct nlattr *nla_src)
{
- int attr_len = nla_src->nla_len - sizeof(struct nlattr);
+ MPASS(nla_src->nla_len >= sizeof(struct nlattr));
- MPASS(attr_len >= 0);
-
- return (nlattr_add(nw, nla_src->nla_type, attr_len, (const void *)(nla_src + 1)));
+ return (nlattr_add(nw, nla_src->nla_type,
+ nla_src->nla_len - sizeof(struct nlattr),
+ (const void *)(nla_src + 1)));
}
static inline bool
-nlattr_add_bool(struct nl_writer *nw, int attrtype, bool value)
+nlattr_add_bool(struct nl_writer *nw, uint16_t attrtype, bool value)
{
return (nlattr_add(nw, attrtype, sizeof(bool), &value));
}
static inline bool
-nlattr_add_u8(struct nl_writer *nw, int attrtype, uint8_t value)
+nlattr_add_u8(struct nl_writer *nw, uint16_t attrtype, uint8_t value)
{
return (nlattr_add(nw, attrtype, sizeof(uint8_t), &value));
}
static inline bool
-nlattr_add_u16(struct nl_writer *nw, int attrtype, uint16_t value)
+nlattr_add_u16(struct nl_writer *nw, uint16_t attrtype, uint16_t value)
{
return (nlattr_add(nw, attrtype, sizeof(uint16_t), &value));
}
static inline bool
-nlattr_add_u32(struct nl_writer *nw, int attrtype, uint32_t value)
+nlattr_add_u32(struct nl_writer *nw, uint16_t attrtype, uint32_t value)
{
return (nlattr_add(nw, attrtype, sizeof(uint32_t), &value));
}
static inline bool
-nlattr_add_u64(struct nl_writer *nw, int attrtype, uint64_t value)
+nlattr_add_u64(struct nl_writer *nw, uint16_t attrtype, uint64_t value)
{
return (nlattr_add(nw, attrtype, sizeof(uint64_t), &value));
}
static inline bool
-nlattr_add_s8(struct nl_writer *nw, int attrtype, int8_t value)
+nlattr_add_s8(struct nl_writer *nw, uint16_t attrtype, int8_t value)
{
return (nlattr_add(nw, attrtype, sizeof(int8_t), &value));
}
static inline bool
-nlattr_add_s16(struct nl_writer *nw, int attrtype, int16_t value)
+nlattr_add_s16(struct nl_writer *nw, uint16_t attrtype, int16_t value)
{
return (nlattr_add(nw, attrtype, sizeof(int16_t), &value));
}
static inline bool
-nlattr_add_s32(struct nl_writer *nw, int attrtype, int32_t value)
+nlattr_add_s32(struct nl_writer *nw, uint16_t attrtype, int32_t value)
{
return (nlattr_add(nw, attrtype, sizeof(int32_t), &value));
}
static inline bool
-nlattr_add_s64(struct nl_writer *nw, int attrtype, int64_t value)
+nlattr_add_s64(struct nl_writer *nw, uint16_t attrtype, int64_t value)
{
return (nlattr_add(nw, attrtype, sizeof(int64_t), &value));
}
static inline bool
-nlattr_add_flag(struct nl_writer *nw, int attrtype)
+nlattr_add_flag(struct nl_writer *nw, uint16_t attrtype)
{
return (nlattr_add(nw, attrtype, 0, NULL));
}
static inline bool
-nlattr_add_string(struct nl_writer *nw, int attrtype, const char *str)
+nlattr_add_string(struct nl_writer *nw, uint16_t attrtype, const char *str)
{
return (nlattr_add(nw, attrtype, strlen(str) + 1, str));
}
static inline bool
-nlattr_add_in_addr(struct nl_writer *nw, int attrtype, const struct in_addr *in)
+nlattr_add_in_addr(struct nl_writer *nw, uint16_t attrtype,
+ const struct in_addr *in)
{
return (nlattr_add(nw, attrtype, sizeof(*in), in));
}
static inline bool
-nlattr_add_in6_addr(struct nl_writer *nw, int attrtype, const struct in6_addr *in6)
+nlattr_add_in6_addr(struct nl_writer *nw, uint16_t attrtype,
+ const struct in6_addr *in6)
{
return (nlattr_add(nw, attrtype, sizeof(*in6), in6));
}
diff --git a/sys/netlink/netlink_message_writer.c b/sys/netlink/netlink_message_writer.c
--- a/sys/netlink/netlink_message_writer.c
+++ b/sys/netlink/netlink_message_writer.c
@@ -363,11 +363,15 @@
}
bool
-nlattr_add(struct nl_writer *nw, int attr_type, int attr_len, const void *data)
+nlattr_add(struct nl_writer *nw, uint16_t attr_type, uint16_t attr_len,
+ const void *data)
{
struct nl_buf *nb = nw->buf;
struct nlattr *nla;
- u_int required_len;
+ size_t required_len;
+
+ KASSERT(attr_len <= UINT16_MAX - sizeof(struct nlattr),
+ ("%s: invalid attribute length %u", __func__, attr_len));
required_len = NLA_ALIGN(attr_len + sizeof(struct nlattr));
if (__predict_false(nb->datalen + required_len > nb->buflen)) {

File Metadata

Mime Type
text/plain
Expires
Mon, Apr 28, 10:52 AM (7 h, 18 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17829253
Default Alt Text
D47552.diff (4 KB)

Event Timeline