| From fb23f26d36f98a00ac1a256d0ed13a9298a2341e Mon Sep 17 00:00:00 2001 |
| From: Vasily Averin <vvs@virtuozzo.com> |
| Date: Tue, 25 Feb 2020 10:07:12 +0300 |
| Subject: [PATCH] netfilter: x_tables: xt_mttg_seq_next should increase |
| position index |
| |
| commit ee84f19cbbe9cf7cba2958acb03163fed3ecbb0f upstream. |
| |
| If .next function does not change position index, |
| following .show function will repeat output related |
| to current position index. |
| |
| Without patch: |
| # dd if=/proc/net/ip_tables_matches # original file output |
| conntrack |
| conntrack |
| conntrack |
| recent |
| recent |
| icmp |
| udplite |
| udp |
| tcp |
| 0+1 records in |
| 0+1 records out |
| 65 bytes copied, 5.4074e-05 s, 1.2 MB/s |
| |
| # dd if=/proc/net/ip_tables_matches bs=62 skip=1 |
| dd: /proc/net/ip_tables_matches: cannot skip to specified offset |
| cp <<< end of last line |
| tcp <<< and then unexpected whole last line once again |
| 0+1 records in |
| 0+1 records out |
| 7 bytes copied, 0.000102447 s, 68.3 kB/s |
| |
| Cc: stable@vger.kernel.org |
| Fixes: 1f4aace60b0e ("fs/seq_file.c: simplify seq_file iteration code ...") |
| Link: https://bugzilla.kernel.org/show_bug.cgi?id=206283 |
| Signed-off-by: Vasily Averin <vvs@virtuozzo.com> |
| Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c |
| index ce70c2576bb2..44f971f31992 100644 |
| --- a/net/netfilter/x_tables.c |
| +++ b/net/netfilter/x_tables.c |
| @@ -1551,6 +1551,9 @@ static void *xt_mttg_seq_next(struct seq_file *seq, void *v, loff_t *ppos, |
| uint8_t nfproto = (unsigned long)PDE_DATA(file_inode(seq->file)); |
| struct nf_mttg_trav *trav = seq->private; |
| |
| + if (ppos != NULL) |
| + ++(*ppos); |
| + |
| switch (trav->class) { |
| case MTTG_TRAV_INIT: |
| trav->class = MTTG_TRAV_NFP_UNSPEC; |
| @@ -1576,9 +1579,6 @@ static void *xt_mttg_seq_next(struct seq_file *seq, void *v, loff_t *ppos, |
| default: |
| return NULL; |
| } |
| - |
| - if (ppos != NULL) |
| - ++*ppos; |
| return trav; |
| } |
| |
| -- |
| 2.7.4 |
| |