Correctly check buffer length in netlink_add_attribute()

This commit is contained in:
Martin Willi
2013-03-15 14:32:25 +01:00
parent 6ac601f543
commit 53c98f098f
2 changed files with 9 additions and 7 deletions
@@ -292,7 +292,7 @@ void netlink_add_attribute(struct nlmsghdr *hdr, int rta_type, chunk_t data,
{
struct rtattr *rta;
if (NLMSG_ALIGN(hdr->nlmsg_len) + RTA_ALIGN(data.len) > buflen)
if (NLMSG_ALIGN(hdr->nlmsg_len) + RTA_LENGTH(data.len) > buflen)
{
DBG1(DBG_KNL, "unable to add attribute, buffer too small");
return;
@@ -42,7 +42,8 @@ struct netlink_socket_t {
* @param out received netlink message
* @param out_len length of the received message
*/
status_t (*send)(netlink_socket_t *this, struct nlmsghdr *in, struct nlmsghdr **out, size_t *out_len);
status_t (*send)(netlink_socket_t *this, struct nlmsghdr *in,
struct nlmsghdr **out, size_t *out_len);
/**
* Send a netlink message and wait for its acknowledge.
@@ -67,11 +68,12 @@ netlink_socket_t *netlink_socket_create(int protocol);
/**
* Creates an rtattr and adds it to the given netlink message.
*
* @param hdr netlink message
* @param rta_type type of the rtattr
* @param data data to add to the rtattr
* @param buflen length of the netlink message buffer
* @param hdr netlink message
* @param rta_type type of the rtattr
* @param data data to add to the rtattr
* @param buflen length of the netlink message buffer
*/
void netlink_add_attribute(struct nlmsghdr *hdr, int rta_type, chunk_t data, size_t buflen);
void netlink_add_attribute(struct nlmsghdr *hdr, int rta_type, chunk_t data,
size_t buflen);
#endif /* KERNEL_NETLINK_SHARED_H_ */