diff options
-rw-r--r-- | attr.c | 6 | ||||
-rw-r--r-- | genl.c | 2 | ||||
-rw-r--r-- | genl_mngt.c | 2 | ||||
-rw-r--r-- | msg.c | 8 | ||||
-rw-r--r-- | nl.c | 4 |
5 files changed, 13 insertions, 9 deletions
@@ -400,9 +400,11 @@ */ int nla_ok(const struct nlattr *nla, int remaining) { - return remaining >= sizeof(*nla) && + size_t r = remaining; + + return r >= sizeof(*nla) && nla->nla_len >= sizeof(*nla) && - nla->nla_len <= remaining; + nla->nla_len <= r; } /** @@ -151,7 +151,7 @@ int genlmsg_valid_hdr(struct nlmsghdr *nlh, int hdrlen) return 0; ghdr = nlmsg_data(nlh); - if (genlmsg_len(ghdr) < NLMSG_ALIGN(hdrlen)) + if ((unsigned) genlmsg_len(ghdr) < NLMSG_ALIGN(hdrlen)) return 0; return 1; diff --git a/genl_mngt.c b/genl_mngt.c index 246521f..3b603c7 100644 --- a/genl_mngt.c +++ b/genl_mngt.c @@ -154,7 +154,7 @@ int genl_register(struct nl_cache_ops *ops) goto errout; } - if (ops->co_hdrsize < GENL_HDRSIZE(0)) { + if ((size_t) ops->co_hdrsize < GENL_HDRSIZE(0)) { err = -NLE_INVAL; goto errout; } @@ -187,9 +187,11 @@ static size_t default_msg_size = 4096; */ int nlmsg_ok(const struct nlmsghdr *nlh, int remaining) { - return (remaining >= sizeof(struct nlmsghdr) && + size_t r = remaining; + + return (r >= sizeof(struct nlmsghdr) && nlh->nlmsg_len >= sizeof(struct nlmsghdr) && - nlh->nlmsg_len <= remaining); + nlh->nlmsg_len <= r); } /** @@ -358,7 +360,7 @@ struct nl_msg *nlmsg_alloc_simple(int nlmsgtype, int flags) */ void nlmsg_set_default_size(size_t max) { - if (max < nlmsg_total_size(0)) + if (max < (size_t) nlmsg_total_size(0)) max = nlmsg_total_size(0); default_msg_size = max; @@ -425,7 +425,7 @@ retry: } } - if (iov.iov_len < n || + if (iov.iov_len < (size_t) n || msg.msg_flags & MSG_TRUNC) { /* Provided buffer is not long enough, enlarge it * and try again. */ @@ -599,7 +599,7 @@ continue_reading: else if (hdr->nlmsg_type == NLMSG_ERROR) { struct nlmsgerr *e = nlmsg_data(hdr); - if (hdr->nlmsg_len < nlmsg_msg_size(sizeof(*e))) { + if (hdr->nlmsg_len < (unsigned) nlmsg_msg_size(sizeof(*e))) { /* Truncated error message, the default action * is to stop parsing. The user may overrule * this action by returning NL_SKIP or |