lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 3 Feb 2015 11:51:16 +0000
From:	Wang Long <long.wanglong@...wei.com>
To:	<stefani@...bold.net>
CC:	<long.wanglong@...wei.com>, <peifeiyue@...wei.com>,
	<linux-kernel@...r.kernel.org>
Subject: [PATCH] samples: Fix `echo 1 > /proc/int-fifo` never return error

With the kernel module *samples/kfifo/inttype-example.ko*, the system will
create file /proc/int-fifo.

but the current code for this module may have some bug, as the following:

# echo 100 > /proc/int-fifo      ----------------> OK
# echo 1000000 > /proc/int-fifo  ----------------> OK
# echo 99 > /proc/int-fifo       ----------------> Never return
# echo 1000 > /proc/int-fifo     ----------------> Never return

so i found that, the length of the content putting into /proc/int-fifo must be 4, 8, 12 .....

another idea:
this kernel module is about a FIFO which type is int. we should put an interger into it, not the string.
when we reading from this file, we should get all elements in the FIFO. just as the following:

# echo 1 > /proc/int-fifo 
# echo 2 > /proc/int-fifo 
# echo 3 > /proc/int-fifo 
# cat /proc/int-fifo 
1
2
3
# echo 101 > /proc/int-fifo 
# echo 103 > /proc/int-fifo 
# echo 104 > /proc/int-fifo 
# echo 102 > /proc/int-fifo 
# cat /proc/int-fifo 
101
103
104
102

with my patch, we can echo an integer into the FIFO. so the following command is OK.
echo 1 > /proc/int-fifo 

without my patch, the command `echo 1 > /proc/int-fifo` will never return, beacuse the following code:

223 int __kfifo_from_user(struct __kfifo *fifo, const void __user *from,
224                 unsigned long len, unsigned int *copied)
225 {
226         unsigned int l;
227         unsigned long ret;
228         unsigned int esize = fifo->esize;
229         int err;
230 
231         if (esize != 1)
232                 len /= esize;
233 
234         l = kfifo_unused(fifo);
235         if (len > l)
236                 len = l;
237 
238         ret = kfifo_copy_from_user(fifo, from, len, fifo->in, copied);
239         if (unlikely(ret)) {
240                 len -= ret;
241                 err = -EFAULT;
242         } else
243                 err = 0;
244         fifo->in += len;
245         return err;
246 }
247 EXPORT_SYMBOL(__kfifo_from_user);

int the line 231: if len = 3, esize = 4, then at the line 232 len = 0.





Wang Long (1):
  samples: Fix `echo 1 > /proc/int-fifo` never return error

 samples/kfifo/inttype-example.c | 51 ++++++++++++++++++++++++++++++++---------
 1 file changed, 40 insertions(+), 11 deletions(-)

-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ