On Sat, Feb 1, 2020 at 2:49 AM Vasily Averin <vvs@xxxxxxxxxxxxx> wrote: > > If seq_file .next function does not change position index, > read after some lseek can generate unexpected output. > > $ dd if=/sys/fs/selinux/avc/cache_stats # usual output > lookups hits misses allocations reclaims frees > 817223 810034 7189 7189 6992 7037 > 1934894 1926896 7998 7998 7632 7683 > 1322812 1317176 5636 5636 5456 5507 > 1560571 1551548 9023 9023 9056 9115 > 0+1 records in > 0+1 records out > 189 bytes copied, 5,1564e-05 s, 3,7 MB/s > > $# read after lseek to midle of last line > $ dd if=/sys/fs/selinux/avc/cache_stats bs=180 skip=1 > dd: /sys/fs/selinux/avc/cache_stats: cannot skip to specified offset > 056 9115 <<<< end of last line > 1560571 1551548 9023 9023 9056 9115 <<< whole last line once again > 0+1 records in > 0+1 records out > 45 bytes copied, 8,7221e-05 s, 516 kB/s > > $# read after lseek beyond end of of file > $ dd if=/sys/fs/selinux/avc/cache_stats bs=1000 skip=1 > dd: /sys/fs/selinux/avc/cache_stats: cannot skip to specified offset > 1560571 1551548 9023 9023 9056 9115 <<<< generates whole last line > 0+1 records in > 0+1 records out > 36 bytes copied, 9,0934e-05 s, 396 kB/s > > https://bugzilla.kernel.org/show_bug.cgi?id=206283 > Signed-off-by: Vasily Averin <vvs@xxxxxxxxxxxxx> > --- > security/selinux/selinuxfs.c | 1 + > 1 file changed, 1 insertion(+) This is better, thank you. I've queued this up for selinux/next, you'll see it in the repo once the merge window closes. > diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c > index ee94fa4..ad5530e 100644 > --- a/security/selinux/selinuxfs.c > +++ b/security/selinux/selinuxfs.c > @@ -1504,6 +1504,7 @@ static struct avc_cache_stats *sel_avc_get_stat_idx(loff_t *idx) > *idx = cpu + 1; > return &per_cpu(avc_cache_stats, cpu); > } > + (*idx)++; > return NULL; > } > > -- > 1.8.3.1 > -- paul moore www.paul-moore.com