Correctly check buffer length in netlink_add_attribute()
authorMartin Willi <martin@revosec.ch>
Fri, 15 Mar 2013 13:32:25 +0000 (14:32 +0100)
committerMartin Willi <martin@revosec.ch>
Fri, 15 Mar 2013 13:32:25 +0000 (14:32 +0100)
src/libhydra/plugins/kernel_netlink/kernel_netlink_shared.c
src/libhydra/plugins/kernel_netlink/kernel_netlink_shared.h

index 561e852..729e08d 100644 (file)
@@ -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;
index dfd27a2..f5721df 100644 (file)
@@ -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_ */