dhcp-identifier: handle too long duid_len in dhcp_validate_duid_len()
authorThomas Haller <thaller@redhat.com>
Fri, 1 Apr 2016 12:42:22 +0000 (14:42 +0200)
committerThomas Haller <thaller@redhat.com>
Fri, 1 Apr 2016 13:03:27 +0000 (15:03 +0200)
Callers of dhcp_validate_duid_len() know that they must not pass
a zero duid_len. Thus asserting against that is appropriate.
On the other hand, they are not aware of the maximum allowed length
of a duid, as that is the reason why they call dhcp_validate_duid_len()
in the first place. So dhcp_validate_duid_len() should just signal a
regular error.

Thereby, change assert_return() to an assert() as this is an internal
function.

src/libsystemd-network/dhcp-identifier.h

index babae15..e6486b7 100644 (file)
@@ -75,7 +75,7 @@ int dhcp_identifier_set_iaid(int ifindex, uint8_t *mac, size_t mac_len, void *_i
 static inline int dhcp_validate_duid_len(uint16_t duid_type, size_t duid_len) {
         struct duid d;
 
-        assert_return(duid_len > 0 && duid_len <= MAX_DUID_LEN, -EINVAL);
+        assert(duid_len > 0);
 
         switch (duid_type) {
         case DUID_TYPE_LLT:
@@ -95,6 +95,8 @@ static inline int dhcp_validate_duid_len(uint16_t duid_type, size_t duid_len) {
                         return -EINVAL;
                 break;
         default:
+                if (duid_len > sizeof(d.raw))
+                        return -EINVAL;
                 /* accept unknown type in order to be forward compatible */
                 break;
         }