Project

General

Profile

Bug #1952 » gtp-different-family-socket.patch

pablo, 03/05/2024 05:18 PM

View differences:

drivers/net/gtp.c
1332 1332
	return 0;
1333 1333
}
1334 1334

  
1335
#define GTP_TH_MAXLEN	(sizeof(struct udphdr) + sizeof(struct gtp0_header))
1336
#define GTP_IPV6_MAXLEN	(sizeof(struct ipv6hdr) + GTP_TH_MAXLEN)
1337

  
1335 1338
static int gtp_newlink(struct net *src_net, struct net_device *dev,
1336 1339
		       struct nlattr *tb[], struct nlattr *data[],
1337 1340
		       struct netlink_ext_ack *extack)
......
1386 1389
	if (err < 0)
1387 1390
		goto out_hashtable;
1388 1391

  
1392
	if ((gtp->sk0 && gtp->sk0->sk_family == AF_INET6) ||
1393
	    (gtp->sk1u && gtp->sk1u->sk_family == AF_INET6)) {
1394
		dev->mtu = ETH_DATA_LEN - GTP_IPV6_MAXLEN;
1395
		dev->needed_headroom = LL_MAX_HEADER + GTP_IPV6_MAXLEN;
1396
	}
1397

  
1389 1398
	err = register_netdevice(dev);
1390 1399
	if (err < 0) {
1391 1400
		netdev_dbg(dev, "failed to register new netdev %d\n", err);
......
1587 1596
	gtp->sk0 = sk0;
1588 1597
	gtp->sk1u = sk1u;
1589 1598

  
1599
	if (sk0 && sk1u &&
1600
	    sk0->sk_family != sk1u->sk_family) {
1601
		gtp_encap_disable_sock(sk0);
1602
		gtp_encap_disable_sock(sk1u);
1603
		return -EINVAL;
1604
	}
1605

  
1590 1606
	return 0;
1591 1607
}
1592 1608

  
(33-33/33)
Add picture from clipboard (Maximum size: 48.8 MB)