net: remove VLA usage
Subsystems (2)
PATCH 1/1 net: remove VLA usage
Separated snmp_seq_show_tcp_udp() to tcp and udp variants, so the usage of max_t() for the array size can be emitted.
--- net/ipv4/proc.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-)
net/ipv4/proc.c +16 -8
@@ -46,8 +46,6 @@#include <net/sock.h> #include <net/raw.h> -#define TCPUDP_MIB_MAX max_t(u32, UDP_MIB_MAX, TCP_MIB_MAX) -/* * Report socket allocation statistics [[email protected]] */
@@ -398,13 +396,13 @@ static int snmp_seq_show_ipstats(struct seq_file *seq, void *v)return 0 ; } -static int snmp_seq_show_tcp_udp (struct seq_file *seq,void *v) +static int snmp_seq_show_tcp (struct seq_file *seq,void *v) { -unsigned long buff[TCPUDP_MIB_MAX ]; +unsigned long buff[TCP_MIB_MAX ];struct net *net = seq->private;int i; -memset (buff,0 ,TCPUDP_MIB_MAX *sizeof (unsigned long )); +memset (buff,0 ,TCP_MIB_MAX *sizeof (unsigned long ));seq_puts (seq,"\nTcp:" );for (i =0 ; snmp4_tcp_list[i].name; i++)
@@ -421,7 +419,16 @@ static int snmp_seq_show_tcp_udp(struct seq_file *seq, void *v)seq_printf (seq," %lu" , buff[i]); } -memset (buff,0 ,TCPUDP_MIB_MAX *sizeof (unsigned long )); +return 0 ; +} + +static int snmp_seq_show_udp (struct seq_file *seq,void *v) +{ +unsigned long buff[UDP_MIB_MAX ]; +struct net *net = seq->private; +int i; + +memset (buff,0 ,UDP_MIB_MAX *sizeof (unsigned long ));snmp_get_cpu_field_batch (buff, snmp4_udp_list, net->mib.udp_statistics);
@@ -432,7 +439,7 @@ static int snmp_seq_show_tcp_udp(struct seq_file *seq, void *v)for (i =0 ; snmp4_udp_list[i].name; i++)seq_printf (seq," %lu" , buff[i]); -memset (buff,0 ,TCPUDP_MIB_MAX *sizeof (unsigned long )); +memset (buff,0 ,UDP_MIB_MAX *sizeof (unsigned long ));/* the UDP and UDP-Lite MIBs are the same */ seq_puts (seq,"\nUdpLite:" );
@@ -455,7 +462,8 @@ static int snmp_seq_show(struct seq_file *seq, void *v)icmp_put (seq);/* RFC 2011 compatibility */ icmpmsg_put (seq); -snmp_seq_show_tcp_udp (seq, v); +snmp_seq_show_tcp (seq, v); +snmp_seq_show_udp (seq, v);return 0 ; }
Signature · 1 line
2.7.4
David Miller
maintainerFrom: Laszlo Toth <[email protected]>
Date: Thu, 8 Mar 2018 01:19:53 +0100
Quoted 4 lines
Separated
snmp_seq_show_tcp_udp()to tcp and udp variants, so the usage ofmax_t()for the array size can be emitted.Signed-off-by Laszlo Toth <[email protected]>
But it's a max on a constant value, computed at compile time.
I don't see at all why this is necessary.
If the compiler can't figure this out, fix it.
If the compiler warns on this with -Wvla, fix it.
Because there is no reason to have two separate routines for this.
Thank you.
Quoted 13 lines · David Miller
From: Laszlo Toth <[email protected]>
Date: Thu, 8 Mar 2018 01:19:53 +0100Quoted 4 lines
Separated
snmp_seq_show_tcp_udp()to tcp and udp variants, so the usage ofmax_t()for the array size can be emitted.Signed-off-by Laszlo Toth <[email protected]>But it's a max on a constant value, computed at compile time.
I don't see at all why this is necessary.
Quoted 7 lines
If the compiler can't figure this out, fix it.
If the compiler warns on this with -Wvla, fix it.
Because there is no reason to have two separate routines for this.
Thank you.
Yea, since then they'll fix max* defines, so this is unnecessary. Let's just ignore it.
Laszlo