diff options
author | Steven Rostedt (Red Hat) <rostedt@goodmis.org> | 2014-10-27 17:43:45 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2014-11-05 14:11:02 -0500 |
commit | e71456ae9871f53868befd08b1d192ca93ce0753 (patch) | |
tree | 4bd0122380d1d7007b080d29de0b6a64f4bd2f5a | |
parent | 824f1fbee7bbbd850cdb62d3f95143fad4719e20 (diff) |
netfilter: Remove checks of seq_printf() return values
The return value of seq_printf() is soon to be removed. Remove the
checks from seq_printf() in favor of seq_has_overflowed().
Link: http://lkml.kernel.org/r/20141104142236.GA10239@salvia
Acked-by: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: Patrick McHardy <kaber@trash.net>
Cc: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Cc: netfilter-devel@vger.kernel.org
Cc: coreteam@netfilter.org
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c | 36 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_standalone.c | 60 | ||||
-rw-r--r-- | net/netfilter/nf_log.c | 30 | ||||
-rw-r--r-- | net/netfilter/nfnetlink_queue_core.c | 13 | ||||
-rw-r--r-- | net/netfilter/x_tables.c | 19 | ||||
-rw-r--r-- | net/netfilter/xt_hashlimit.c | 36 |
6 files changed, 97 insertions, 97 deletions
diff --git a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c index d927f9e72130..a460a87e14f8 100644 --- a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c +++ b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c | |||
@@ -94,7 +94,7 @@ static void ct_seq_stop(struct seq_file *s, void *v) | |||
94 | } | 94 | } |
95 | 95 | ||
96 | #ifdef CONFIG_NF_CONNTRACK_SECMARK | 96 | #ifdef CONFIG_NF_CONNTRACK_SECMARK |
97 | static int ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) | 97 | static void ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) |
98 | { | 98 | { |
99 | int ret; | 99 | int ret; |
100 | u32 len; | 100 | u32 len; |
@@ -102,17 +102,15 @@ static int ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) | |||
102 | 102 | ||
103 | ret = security_secid_to_secctx(ct->secmark, &secctx, &len); | 103 | ret = security_secid_to_secctx(ct->secmark, &secctx, &len); |
104 | if (ret) | 104 | if (ret) |
105 | return 0; | 105 | return; |
106 | 106 | ||
107 | ret = seq_printf(s, "secctx=%s ", secctx); | 107 | seq_printf(s, "secctx=%s ", secctx); |
108 | 108 | ||
109 | security_release_secctx(secctx, len); | 109 | security_release_secctx(secctx, len); |
110 | return ret; | ||
111 | } | 110 | } |
112 | #else | 111 | #else |
113 | static inline int ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) | 112 | static inline void ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) |
114 | { | 113 | { |
115 | return 0; | ||
116 | } | 114 | } |
117 | #endif | 115 | #endif |
118 | 116 | ||
@@ -141,11 +139,10 @@ static int ct_seq_show(struct seq_file *s, void *v) | |||
141 | NF_CT_ASSERT(l4proto); | 139 | NF_CT_ASSERT(l4proto); |
142 | 140 | ||
143 | ret = -ENOSPC; | 141 | ret = -ENOSPC; |
144 | if (seq_printf(s, "%-8s %u %ld ", | 142 | seq_printf(s, "%-8s %u %ld ", |
145 | l4proto->name, nf_ct_protonum(ct), | 143 | l4proto->name, nf_ct_protonum(ct), |
146 | timer_pending(&ct->timeout) | 144 | timer_pending(&ct->timeout) |
147 | ? (long)(ct->timeout.expires - jiffies)/HZ : 0) != 0) | 145 | ? (long)(ct->timeout.expires - jiffies)/HZ : 0); |
148 | goto release; | ||
149 | 146 | ||
150 | if (l4proto->print_conntrack) | 147 | if (l4proto->print_conntrack) |
151 | l4proto->print_conntrack(s, ct); | 148 | l4proto->print_conntrack(s, ct); |
@@ -163,8 +160,7 @@ static int ct_seq_show(struct seq_file *s, void *v) | |||
163 | goto release; | 160 | goto release; |
164 | 161 | ||
165 | if (!(test_bit(IPS_SEEN_REPLY_BIT, &ct->status))) | 162 | if (!(test_bit(IPS_SEEN_REPLY_BIT, &ct->status))) |
166 | if (seq_printf(s, "[UNREPLIED] ")) | 163 | seq_printf(s, "[UNREPLIED] "); |
167 | goto release; | ||
168 | 164 | ||
169 | print_tuple(s, &ct->tuplehash[IP_CT_DIR_REPLY].tuple, | 165 | print_tuple(s, &ct->tuplehash[IP_CT_DIR_REPLY].tuple, |
170 | l3proto, l4proto); | 166 | l3proto, l4proto); |
@@ -176,19 +172,19 @@ static int ct_seq_show(struct seq_file *s, void *v) | |||
176 | goto release; | 172 | goto release; |
177 | 173 | ||
178 | if (test_bit(IPS_ASSURED_BIT, &ct->status)) | 174 | if (test_bit(IPS_ASSURED_BIT, &ct->status)) |
179 | if (seq_printf(s, "[ASSURED] ")) | 175 | seq_printf(s, "[ASSURED] "); |
180 | goto release; | ||
181 | 176 | ||
182 | #ifdef CONFIG_NF_CONNTRACK_MARK | 177 | #ifdef CONFIG_NF_CONNTRACK_MARK |
183 | if (seq_printf(s, "mark=%u ", ct->mark)) | 178 | seq_printf(s, "mark=%u ", ct->mark); |
184 | goto release; | ||
185 | #endif | 179 | #endif |
186 | 180 | ||
187 | if (ct_show_secctx(s, ct)) | 181 | ct_show_secctx(s, ct); |
188 | goto release; | 182 | |
183 | seq_printf(s, "use=%u\n", atomic_read(&ct->ct_general.use)); | ||
189 | 184 | ||
190 | if (seq_printf(s, "use=%u\n", atomic_read(&ct->ct_general.use))) | 185 | if (seq_has_overflowed(s)) |
191 | goto release; | 186 | goto release; |
187 | |||
192 | ret = 0; | 188 | ret = 0; |
193 | release: | 189 | release: |
194 | nf_ct_put(ct); | 190 | nf_ct_put(ct); |
diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c index 23a0dcab21d4..fc823fa5dcf5 100644 --- a/net/netfilter/nf_conntrack_standalone.c +++ b/net/netfilter/nf_conntrack_standalone.c | |||
@@ -120,7 +120,7 @@ static void ct_seq_stop(struct seq_file *s, void *v) | |||
120 | } | 120 | } |
121 | 121 | ||
122 | #ifdef CONFIG_NF_CONNTRACK_SECMARK | 122 | #ifdef CONFIG_NF_CONNTRACK_SECMARK |
123 | static int ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) | 123 | static void ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) |
124 | { | 124 | { |
125 | int ret; | 125 | int ret; |
126 | u32 len; | 126 | u32 len; |
@@ -128,22 +128,20 @@ static int ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) | |||
128 | 128 | ||
129 | ret = security_secid_to_secctx(ct->secmark, &secctx, &len); | 129 | ret = security_secid_to_secctx(ct->secmark, &secctx, &len); |
130 | if (ret) | 130 | if (ret) |
131 | return 0; | 131 | return; |
132 | 132 | ||
133 | ret = seq_printf(s, "secctx=%s ", secctx); | 133 | seq_printf(s, "secctx=%s ", secctx); |
134 | 134 | ||
135 | security_release_secctx(secctx, len); | 135 | security_release_secctx(secctx, len); |
136 | return ret; | ||
137 | } | 136 | } |
138 | #else | 137 | #else |
139 | static inline int ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) | 138 | static inline void ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) |
140 | { | 139 | { |
141 | return 0; | ||
142 | } | 140 | } |
143 | #endif | 141 | #endif |
144 | 142 | ||
145 | #ifdef CONFIG_NF_CONNTRACK_TIMESTAMP | 143 | #ifdef CONFIG_NF_CONNTRACK_TIMESTAMP |
146 | static int ct_show_delta_time(struct seq_file *s, const struct nf_conn *ct) | 144 | static void ct_show_delta_time(struct seq_file *s, const struct nf_conn *ct) |
147 | { | 145 | { |
148 | struct ct_iter_state *st = s->private; | 146 | struct ct_iter_state *st = s->private; |
149 | struct nf_conn_tstamp *tstamp; | 147 | struct nf_conn_tstamp *tstamp; |
@@ -157,16 +155,15 @@ static int ct_show_delta_time(struct seq_file *s, const struct nf_conn *ct) | |||
157 | else | 155 | else |
158 | delta_time = 0; | 156 | delta_time = 0; |
159 | 157 | ||
160 | return seq_printf(s, "delta-time=%llu ", | 158 | seq_printf(s, "delta-time=%llu ", |
161 | (unsigned long long)delta_time); | 159 | (unsigned long long)delta_time); |
162 | } | 160 | } |
163 | return 0; | 161 | return; |
164 | } | 162 | } |
165 | #else | 163 | #else |
166 | static inline int | 164 | static inline void |
167 | ct_show_delta_time(struct seq_file *s, const struct nf_conn *ct) | 165 | ct_show_delta_time(struct seq_file *s, const struct nf_conn *ct) |
168 | { | 166 | { |
169 | return 0; | ||
170 | } | 167 | } |
171 | #endif | 168 | #endif |
172 | 169 | ||
@@ -193,12 +190,11 @@ static int ct_seq_show(struct seq_file *s, void *v) | |||
193 | NF_CT_ASSERT(l4proto); | 190 | NF_CT_ASSERT(l4proto); |
194 | 191 | ||
195 | ret = -ENOSPC; | 192 | ret = -ENOSPC; |
196 | if (seq_printf(s, "%-8s %u %-8s %u %ld ", | 193 | seq_printf(s, "%-8s %u %-8s %u %ld ", |
197 | l3proto->name, nf_ct_l3num(ct), | 194 | l3proto->name, nf_ct_l3num(ct), |
198 | l4proto->name, nf_ct_protonum(ct), | 195 | l4proto->name, nf_ct_protonum(ct), |
199 | timer_pending(&ct->timeout) | 196 | timer_pending(&ct->timeout) |
200 | ? (long)(ct->timeout.expires - jiffies)/HZ : 0) != 0) | 197 | ? (long)(ct->timeout.expires - jiffies)/HZ : 0); |
201 | goto release; | ||
202 | 198 | ||
203 | if (l4proto->print_conntrack) | 199 | if (l4proto->print_conntrack) |
204 | l4proto->print_conntrack(s, ct); | 200 | l4proto->print_conntrack(s, ct); |
@@ -206,12 +202,14 @@ static int ct_seq_show(struct seq_file *s, void *v) | |||
206 | print_tuple(s, &ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple, | 202 | print_tuple(s, &ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple, |
207 | l3proto, l4proto); | 203 | l3proto, l4proto); |
208 | 204 | ||
205 | if (seq_has_overflowed(s)) | ||
206 | goto release; | ||
207 | |||
209 | if (seq_print_acct(s, ct, IP_CT_DIR_ORIGINAL)) | 208 | if (seq_print_acct(s, ct, IP_CT_DIR_ORIGINAL)) |
210 | goto release; | 209 | goto release; |
211 | 210 | ||
212 | if (!(test_bit(IPS_SEEN_REPLY_BIT, &ct->status))) | 211 | if (!(test_bit(IPS_SEEN_REPLY_BIT, &ct->status))) |
213 | if (seq_printf(s, "[UNREPLIED] ")) | 212 | seq_printf(s, "[UNREPLIED] "); |
214 | goto release; | ||
215 | 213 | ||
216 | print_tuple(s, &ct->tuplehash[IP_CT_DIR_REPLY].tuple, | 214 | print_tuple(s, &ct->tuplehash[IP_CT_DIR_REPLY].tuple, |
217 | l3proto, l4proto); | 215 | l3proto, l4proto); |
@@ -220,26 +218,26 @@ static int ct_seq_show(struct seq_file *s, void *v) | |||
220 | goto release; | 218 | goto release; |
221 | 219 | ||
222 | if (test_bit(IPS_ASSURED_BIT, &ct->status)) | 220 | if (test_bit(IPS_ASSURED_BIT, &ct->status)) |
223 | if (seq_printf(s, "[ASSURED] ")) | 221 | seq_printf(s, "[ASSURED] "); |
224 | goto release; | ||
225 | 222 | ||
226 | #if defined(CONFIG_NF_CONNTRACK_MARK) | 223 | if (seq_has_overflowed(s)) |
227 | if (seq_printf(s, "mark=%u ", ct->mark)) | ||
228 | goto release; | 224 | goto release; |
225 | |||
226 | #if defined(CONFIG_NF_CONNTRACK_MARK) | ||
227 | seq_printf(s, "mark=%u ", ct->mark); | ||
229 | #endif | 228 | #endif |
230 | 229 | ||
231 | if (ct_show_secctx(s, ct)) | 230 | ct_show_secctx(s, ct); |
232 | goto release; | ||
233 | 231 | ||
234 | #ifdef CONFIG_NF_CONNTRACK_ZONES | 232 | #ifdef CONFIG_NF_CONNTRACK_ZONES |
235 | if (seq_printf(s, "zone=%u ", nf_ct_zone(ct))) | 233 | seq_printf(s, "zone=%u ", nf_ct_zone(ct)); |
236 | goto release; | ||
237 | #endif | 234 | #endif |
238 | 235 | ||
239 | if (ct_show_delta_time(s, ct)) | 236 | ct_show_delta_time(s, ct); |
240 | goto release; | 237 | |
238 | seq_printf(s, "use=%u\n", atomic_read(&ct->ct_general.use)); | ||
241 | 239 | ||
242 | if (seq_printf(s, "use=%u\n", atomic_read(&ct->ct_general.use))) | 240 | if (seq_has_overflowed(s)) |
243 | goto release; | 241 | goto release; |
244 | 242 | ||
245 | ret = 0; | 243 | ret = 0; |
diff --git a/net/netfilter/nf_log.c b/net/netfilter/nf_log.c index d7197649dba6..6e3b9117db1f 100644 --- a/net/netfilter/nf_log.c +++ b/net/netfilter/nf_log.c | |||
@@ -294,19 +294,19 @@ static int seq_show(struct seq_file *s, void *v) | |||
294 | { | 294 | { |
295 | loff_t *pos = v; | 295 | loff_t *pos = v; |
296 | const struct nf_logger *logger; | 296 | const struct nf_logger *logger; |
297 | int i, ret; | 297 | int i; |
298 | struct net *net = seq_file_net(s); | 298 | struct net *net = seq_file_net(s); |
299 | 299 | ||
300 | logger = rcu_dereference_protected(net->nf.nf_loggers[*pos], | 300 | logger = rcu_dereference_protected(net->nf.nf_loggers[*pos], |
301 | lockdep_is_held(&nf_log_mutex)); | 301 | lockdep_is_held(&nf_log_mutex)); |
302 | 302 | ||
303 | if (!logger) | 303 | if (!logger) |
304 | ret = seq_printf(s, "%2lld NONE (", *pos); | 304 | seq_printf(s, "%2lld NONE (", *pos); |
305 | else | 305 | else |
306 | ret = seq_printf(s, "%2lld %s (", *pos, logger->name); | 306 | seq_printf(s, "%2lld %s (", *pos, logger->name); |
307 | 307 | ||
308 | if (ret < 0) | 308 | if (seq_has_overflowed(s)) |
309 | return ret; | 309 | return -ENOSPC; |
310 | 310 | ||
311 | for (i = 0; i < NF_LOG_TYPE_MAX; i++) { | 311 | for (i = 0; i < NF_LOG_TYPE_MAX; i++) { |
312 | if (loggers[*pos][i] == NULL) | 312 | if (loggers[*pos][i] == NULL) |
@@ -314,17 +314,19 @@ static int seq_show(struct seq_file *s, void *v) | |||
314 | 314 | ||
315 | logger = rcu_dereference_protected(loggers[*pos][i], | 315 | logger = rcu_dereference_protected(loggers[*pos][i], |
316 | lockdep_is_held(&nf_log_mutex)); | 316 | lockdep_is_held(&nf_log_mutex)); |
317 | ret = seq_printf(s, "%s", logger->name); | 317 | seq_printf(s, "%s", logger->name); |
318 | if (ret < 0) | 318 | if (i == 0 && loggers[*pos][i + 1] != NULL) |
319 | return ret; | 319 | seq_printf(s, ","); |
320 | if (i == 0 && loggers[*pos][i + 1] != NULL) { | 320 | |
321 | ret = seq_printf(s, ","); | 321 | if (seq_has_overflowed(s)) |
322 | if (ret < 0) | 322 | return -ENOSPC; |
323 | return ret; | ||
324 | } | ||
325 | } | 323 | } |
326 | 324 | ||
327 | return seq_printf(s, ")\n"); | 325 | seq_printf(s, ")\n"); |
326 | |||
327 | if (seq_has_overflowed(s)) | ||
328 | return -ENOSPC; | ||
329 | return 0; | ||
328 | } | 330 | } |
329 | 331 | ||
330 | static const struct seq_operations nflog_seq_ops = { | 332 | static const struct seq_operations nflog_seq_ops = { |
diff --git a/net/netfilter/nfnetlink_queue_core.c b/net/netfilter/nfnetlink_queue_core.c index a82077d9f59b..f823f1538c4f 100644 --- a/net/netfilter/nfnetlink_queue_core.c +++ b/net/netfilter/nfnetlink_queue_core.c | |||
@@ -1242,12 +1242,13 @@ static int seq_show(struct seq_file *s, void *v) | |||
1242 | { | 1242 | { |
1243 | const struct nfqnl_instance *inst = v; | 1243 | const struct nfqnl_instance *inst = v; |
1244 | 1244 | ||
1245 | return seq_printf(s, "%5d %6d %5d %1d %5d %5d %5d %8d %2d\n", | 1245 | seq_printf(s, "%5d %6d %5d %1d %5d %5d %5d %8d %2d\n", |
1246 | inst->queue_num, | 1246 | inst->queue_num, |
1247 | inst->peer_portid, inst->queue_total, | 1247 | inst->peer_portid, inst->queue_total, |
1248 | inst->copy_mode, inst->copy_range, | 1248 | inst->copy_mode, inst->copy_range, |
1249 | inst->queue_dropped, inst->queue_user_dropped, | 1249 | inst->queue_dropped, inst->queue_user_dropped, |
1250 | inst->id_sequence, 1); | 1250 | inst->id_sequence, 1); |
1251 | return seq_has_overflowed(s); | ||
1251 | } | 1252 | } |
1252 | 1253 | ||
1253 | static const struct seq_operations nfqnl_seq_ops = { | 1254 | static const struct seq_operations nfqnl_seq_ops = { |
diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c index 133eb4772f12..51a459c3c649 100644 --- a/net/netfilter/x_tables.c +++ b/net/netfilter/x_tables.c | |||
@@ -947,9 +947,10 @@ static int xt_table_seq_show(struct seq_file *seq, void *v) | |||
947 | { | 947 | { |
948 | struct xt_table *table = list_entry(v, struct xt_table, list); | 948 | struct xt_table *table = list_entry(v, struct xt_table, list); |
949 | 949 | ||
950 | if (strlen(table->name)) | 950 | if (strlen(table->name)) { |
951 | return seq_printf(seq, "%s\n", table->name); | 951 | seq_printf(seq, "%s\n", table->name); |
952 | else | 952 | return seq_has_overflowed(seq); |
953 | } else | ||
953 | return 0; | 954 | return 0; |
954 | } | 955 | } |
955 | 956 | ||
@@ -1086,8 +1087,10 @@ static int xt_match_seq_show(struct seq_file *seq, void *v) | |||
1086 | if (trav->curr == trav->head) | 1087 | if (trav->curr == trav->head) |
1087 | return 0; | 1088 | return 0; |
1088 | match = list_entry(trav->curr, struct xt_match, list); | 1089 | match = list_entry(trav->curr, struct xt_match, list); |
1089 | return (*match->name == '\0') ? 0 : | 1090 | if (*match->name == '\0') |
1090 | seq_printf(seq, "%s\n", match->name); | 1091 | return 0; |
1092 | seq_printf(seq, "%s\n", match->name); | ||
1093 | return seq_has_overflowed(seq); | ||
1091 | } | 1094 | } |
1092 | return 0; | 1095 | return 0; |
1093 | } | 1096 | } |
@@ -1139,8 +1142,10 @@ static int xt_target_seq_show(struct seq_file *seq, void *v) | |||
1139 | if (trav->curr == trav->head) | 1142 | if (trav->curr == trav->head) |
1140 | return 0; | 1143 | return 0; |
1141 | target = list_entry(trav->curr, struct xt_target, list); | 1144 | target = list_entry(trav->curr, struct xt_target, list); |
1142 | return (*target->name == '\0') ? 0 : | 1145 | if (*target->name == '\0') |
1143 | seq_printf(seq, "%s\n", target->name); | 1146 | return 0; |
1147 | seq_printf(seq, "%s\n", target->name); | ||
1148 | return seq_has_overflowed(seq); | ||
1144 | } | 1149 | } |
1145 | return 0; | 1150 | return 0; |
1146 | } | 1151 | } |
diff --git a/net/netfilter/xt_hashlimit.c b/net/netfilter/xt_hashlimit.c index 05fbc2a0be46..178696852bde 100644 --- a/net/netfilter/xt_hashlimit.c +++ b/net/netfilter/xt_hashlimit.c | |||
@@ -789,7 +789,6 @@ static void dl_seq_stop(struct seq_file *s, void *v) | |||
789 | static int dl_seq_real_show(struct dsthash_ent *ent, u_int8_t family, | 789 | static int dl_seq_real_show(struct dsthash_ent *ent, u_int8_t family, |
790 | struct seq_file *s) | 790 | struct seq_file *s) |
791 | { | 791 | { |
792 | int res; | ||
793 | const struct xt_hashlimit_htable *ht = s->private; | 792 | const struct xt_hashlimit_htable *ht = s->private; |
794 | 793 | ||
795 | spin_lock(&ent->lock); | 794 | spin_lock(&ent->lock); |
@@ -798,33 +797,32 @@ static int dl_seq_real_show(struct dsthash_ent *ent, u_int8_t family, | |||
798 | 797 | ||
799 | switch (family) { | 798 | switch (family) { |
800 | case NFPROTO_IPV4: | 799 | case NFPROTO_IPV4: |
801 | res = seq_printf(s, "%ld %pI4:%u->%pI4:%u %u %u %u\n", | 800 | seq_printf(s, "%ld %pI4:%u->%pI4:%u %u %u %u\n", |
802 | (long)(ent->expires - jiffies)/HZ, | 801 | (long)(ent->expires - jiffies)/HZ, |
803 | &ent->dst.ip.src, | 802 | &ent->dst.ip.src, |
804 | ntohs(ent->dst.src_port), | 803 | ntohs(ent->dst.src_port), |
805 | &ent->dst.ip.dst, | 804 | &ent->dst.ip.dst, |
806 | ntohs(ent->dst.dst_port), | 805 | ntohs(ent->dst.dst_port), |
807 | ent->rateinfo.credit, ent->rateinfo.credit_cap, | 806 | ent->rateinfo.credit, ent->rateinfo.credit_cap, |
808 | ent->rateinfo.cost); | 807 | ent->rateinfo.cost); |
809 | break; | 808 | break; |
810 | #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES) | 809 | #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES) |
811 | case NFPROTO_IPV6: | 810 | case NFPROTO_IPV6: |
812 | res = seq_printf(s, "%ld %pI6:%u->%pI6:%u %u %u %u\n", | 811 | seq_printf(s, "%ld %pI6:%u->%pI6:%u %u %u %u\n", |
813 | (long)(ent->expires - jiffies)/HZ, | 812 | (long)(ent->expires - jiffies)/HZ, |
814 | &ent->dst.ip6.src, | 813 | &ent->dst.ip6.src, |
815 | ntohs(ent->dst.src_port), | 814 | ntohs(ent->dst.src_port), |
816 | &ent->dst.ip6.dst, | 815 | &ent->dst.ip6.dst, |
817 | ntohs(ent->dst.dst_port), | 816 | ntohs(ent->dst.dst_port), |
818 | ent->rateinfo.credit, ent->rateinfo.credit_cap, | 817 | ent->rateinfo.credit, ent->rateinfo.credit_cap, |
819 | ent->rateinfo.cost); | 818 | ent->rateinfo.cost); |
820 | break; | 819 | break; |
821 | #endif | 820 | #endif |
822 | default: | 821 | default: |
823 | BUG(); | 822 | BUG(); |
824 | res = 0; | ||
825 | } | 823 | } |
826 | spin_unlock(&ent->lock); | 824 | spin_unlock(&ent->lock); |
827 | return res; | 825 | return seq_has_overflowed(s); |
828 | } | 826 | } |
829 | 827 | ||
830 | static int dl_seq_show(struct seq_file *s, void *v) | 828 | static int dl_seq_show(struct seq_file *s, void *v) |