diff --git a/src/linux/net/newip/nip_hooks_register.c b/src/linux/net/newip/nip_hooks_register.c index deea361fd8f6984ffc8d499bdf642045ce034a8a..a88ab8fde011d108f7341de1f2b9d85d8d7890d2 100644 --- a/src/linux/net/newip/nip_hooks_register.c +++ b/src/linux/net/newip/nip_hooks_register.c @@ -20,7 +20,14 @@ void ninet_ehashfn_hook(void *data, const struct sock *sk, u32 *ret) void ninet_gifconf_hook(void *data, struct net_device *dev, char __user *buf, int len, int size, int *ret) { - *ret = ninet_gifconf(dev, buf, len, size); + if (*ret >= 0) { + int done = ninet_gifconf(dev, buf + *ret, len - *ret, size); + + if (done < 0) + *ret = done; + else + *ret += done; + } } int ninet_hooks_register(void)