diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index 8489beff5c25c971067f38833ed4a790a98dd86e..ea81ccf3c7d6a53095b4922329c25b566d5b5940 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -3836,6 +3836,8 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
 	case PACKET_HDRLEN:
 		if (len > sizeof(int))
 			len = sizeof(int);
+		if (len < sizeof(int))
+			return -EINVAL;
 		if (copy_from_user(&val, optval, len))
 			return -EFAULT;
 		switch (val) {