Skip to content

Commit 555d5b7

Browse files
Guillaume Naultdavem330
authored andcommitted
ppp: clarify parsing of user supplied data in ppp_set_compress()
* Split big conditional statement. * Check (data.length <= CCP_MAX_OPTION_LENGTH) only once. * Don't read ccp_option[1] if not initialised. Reading uninitialised ccp_option[1] was harmless, because this could only happen when data.length was 0 or 1. So even then, we couldn't pass the (ccp_option[1] < 2 || ccp_option[1] > data.length) test anyway. Signed-off-by: Guillaume Nault <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 4fee7da commit 555d5b7

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

drivers/net/ppp/ppp_generic.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2429,13 +2429,15 @@ ppp_set_compress(struct ppp *ppp, unsigned long arg)
24292429
unsigned char ccp_option[CCP_MAX_OPTION_LENGTH];
24302430

24312431
err = -EFAULT;
2432-
if (copy_from_user(&data, (void __user *) arg, sizeof(data)) ||
2433-
(data.length <= CCP_MAX_OPTION_LENGTH &&
2434-
copy_from_user(ccp_option, (void __user *) data.ptr, data.length)))
2432+
if (copy_from_user(&data, (void __user *) arg, sizeof(data)))
24352433
goto out;
2434+
if (data.length > CCP_MAX_OPTION_LENGTH)
2435+
goto out;
2436+
if (copy_from_user(ccp_option, (void __user *) data.ptr, data.length))
2437+
goto out;
2438+
24362439
err = -EINVAL;
2437-
if (data.length > CCP_MAX_OPTION_LENGTH ||
2438-
ccp_option[1] < 2 || ccp_option[1] > data.length)
2440+
if (data.length < 2 || ccp_option[1] < 2 || ccp_option[1] > data.length)
24392441
goto out;
24402442

24412443
cp = try_then_request_module(

0 commit comments

Comments
 (0)