mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
[PATCH] Range checking in do_proc_dointvec_(userhz_)jiffies_conv
When (integer) sysctl values are in either seconds or centiseconds, but represented internally as jiffies, the allowable value range is decreased. This patch adds range checks to the conversion routines. For values in seconds: maximum LONG_MAX / HZ. For values in centiseconds: maximum (LONG_MAX / HZ) * USER_HZ. (BTW, does anyone else feel that an interface in seconds should not be accepting negative values?) Signed-off-by: Bart Samwel <bart@samwel.tk> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
ed5b43f15a
commit
cba9f33d13
@ -2053,6 +2053,8 @@ static int do_proc_dointvec_jiffies_conv(int *negp, unsigned long *lvalp,
|
|||||||
int write, void *data)
|
int write, void *data)
|
||||||
{
|
{
|
||||||
if (write) {
|
if (write) {
|
||||||
|
if (*lvalp > LONG_MAX / HZ)
|
||||||
|
return 1;
|
||||||
*valp = *negp ? -(*lvalp*HZ) : (*lvalp*HZ);
|
*valp = *negp ? -(*lvalp*HZ) : (*lvalp*HZ);
|
||||||
} else {
|
} else {
|
||||||
int val = *valp;
|
int val = *valp;
|
||||||
@ -2074,6 +2076,8 @@ static int do_proc_dointvec_userhz_jiffies_conv(int *negp, unsigned long *lvalp,
|
|||||||
int write, void *data)
|
int write, void *data)
|
||||||
{
|
{
|
||||||
if (write) {
|
if (write) {
|
||||||
|
if (USER_HZ < HZ && *lvalp > (LONG_MAX / HZ) * USER_HZ)
|
||||||
|
return 1;
|
||||||
*valp = clock_t_to_jiffies(*negp ? -*lvalp : *lvalp);
|
*valp = clock_t_to_jiffies(*negp ? -*lvalp : *lvalp);
|
||||||
} else {
|
} else {
|
||||||
int val = *valp;
|
int val = *valp;
|
||||||
|
Loading…
Reference in New Issue
Block a user