|
@@ -271,6 +271,7 @@ static int raw_send_hdrinc(struct sock *sk, void *from, size_t length,
|
|
|
int hh_len;
|
|
|
struct iphdr *iph;
|
|
|
struct sk_buff *skb;
|
|
|
+ unsigned int iphlen;
|
|
|
int err;
|
|
|
|
|
|
if (length > rt->u.dst.dev->mtu) {
|
|
@@ -304,7 +305,8 @@ static int raw_send_hdrinc(struct sock *sk, void *from, size_t length,
|
|
|
goto error_fault;
|
|
|
|
|
|
/* We don't modify invalid header */
|
|
|
- if (length >= sizeof(*iph) && iph->ihl * 4U <= length) {
|
|
|
+ iphlen = iph->ihl * 4;
|
|
|
+ if (iphlen >= sizeof(*iph) && iphlen <= length) {
|
|
|
if (!iph->saddr)
|
|
|
iph->saddr = rt->rt_src;
|
|
|
iph->check = 0;
|