diff options
author | Nikitas Angelinas <nikitas.angelinas@gmail.com> | 2017-07-29 23:36:36 -0400 |
---|---|---|
committer | Petr Mladek <pmladek@suse.com> | 2017-08-15 10:28:16 -0400 |
commit | 077a1cc06f72f95efd077d433993c16191008e47 (patch) | |
tree | 5d1c7194b36b9a05315c1f12e6cba42aa792bcfa | |
parent | 5a814231ae3d4f248a8ecb668a072a1da471c656 (diff) |
printk: Clean up do_syslog() error handling
The error variable in do_syslog() is preemptively set to the error code
before the error condition is checked, and then set to 0 if the error
condition is not encountered. This is not necessary, as it is likely
simpler to return immediately upon encountering the error condition. A
redundant set of the error variable to 0 is also removed.
This patch has been build-tested on x86_64, but not tested for
functionality.
Link: http://lkml.kernel.org/r/20170730033636.GA935@vostro
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Nikitas Angelinas <nikitas.angelinas@gmail.com>
Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
-rw-r--r-- | kernel/printk/printk.c | 35 |
1 files changed, 12 insertions, 23 deletions
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 87f1a8f4e0f9..cfd9ab1b80c5 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c | |||
@@ -1435,7 +1435,7 @@ int do_syslog(int type, char __user *buf, int len, int source) | |||
1435 | 1435 | ||
1436 | error = check_syslog_permissions(type, source); | 1436 | error = check_syslog_permissions(type, source); |
1437 | if (error) | 1437 | if (error) |
1438 | goto out; | 1438 | return error; |
1439 | 1439 | ||
1440 | switch (type) { | 1440 | switch (type) { |
1441 | case SYSLOG_ACTION_CLOSE: /* Close log */ | 1441 | case SYSLOG_ACTION_CLOSE: /* Close log */ |
@@ -1443,20 +1443,16 @@ int do_syslog(int type, char __user *buf, int len, int source) | |||
1443 | case SYSLOG_ACTION_OPEN: /* Open log */ | 1443 | case SYSLOG_ACTION_OPEN: /* Open log */ |
1444 | break; | 1444 | break; |
1445 | case SYSLOG_ACTION_READ: /* Read from log */ | 1445 | case SYSLOG_ACTION_READ: /* Read from log */ |
1446 | error = -EINVAL; | ||
1447 | if (!buf || len < 0) | 1446 | if (!buf || len < 0) |
1448 | goto out; | 1447 | return -EINVAL; |
1449 | error = 0; | ||
1450 | if (!len) | 1448 | if (!len) |
1451 | goto out; | 1449 | return 0; |
1452 | if (!access_ok(VERIFY_WRITE, buf, len)) { | 1450 | if (!access_ok(VERIFY_WRITE, buf, len)) |
1453 | error = -EFAULT; | 1451 | return -EFAULT; |
1454 | goto out; | ||
1455 | } | ||
1456 | error = wait_event_interruptible(log_wait, | 1452 | error = wait_event_interruptible(log_wait, |
1457 | syslog_seq != log_next_seq); | 1453 | syslog_seq != log_next_seq); |
1458 | if (error) | 1454 | if (error) |
1459 | goto out; | 1455 | return error; |
1460 | error = syslog_print(buf, len); | 1456 | error = syslog_print(buf, len); |
1461 | break; | 1457 | break; |
1462 | /* Read/clear last kernel messages */ | 1458 | /* Read/clear last kernel messages */ |
@@ -1465,16 +1461,12 @@ int do_syslog(int type, char __user *buf, int len, int source) | |||
1465 | /* FALL THRU */ | 1461 | /* FALL THRU */ |
1466 | /* Read last kernel messages */ | 1462 | /* Read last kernel messages */ |
1467 | case SYSLOG_ACTION_READ_ALL: | 1463 | case SYSLOG_ACTION_READ_ALL: |
1468 | error = -EINVAL; | ||
1469 | if (!buf || len < 0) | 1464 | if (!buf || len < 0) |
1470 | goto out; | 1465 | return -EINVAL; |
1471 | error = 0; | ||
1472 | if (!len) | 1466 | if (!len) |
1473 | goto out; | 1467 | return 0; |
1474 | if (!access_ok(VERIFY_WRITE, buf, len)) { | 1468 | if (!access_ok(VERIFY_WRITE, buf, len)) |
1475 | error = -EFAULT; | 1469 | return -EFAULT; |
1476 | goto out; | ||
1477 | } | ||
1478 | error = syslog_print_all(buf, len, clear); | 1470 | error = syslog_print_all(buf, len, clear); |
1479 | break; | 1471 | break; |
1480 | /* Clear ring buffer */ | 1472 | /* Clear ring buffer */ |
@@ -1496,15 +1488,13 @@ int do_syslog(int type, char __user *buf, int len, int source) | |||
1496 | break; | 1488 | break; |
1497 | /* Set level of messages printed to console */ | 1489 | /* Set level of messages printed to console */ |
1498 | case SYSLOG_ACTION_CONSOLE_LEVEL: | 1490 | case SYSLOG_ACTION_CONSOLE_LEVEL: |
1499 | error = -EINVAL; | ||
1500 | if (len < 1 || len > 8) | 1491 | if (len < 1 || len > 8) |
1501 | goto out; | 1492 | return -EINVAL; |
1502 | if (len < minimum_console_loglevel) | 1493 | if (len < minimum_console_loglevel) |
1503 | len = minimum_console_loglevel; | 1494 | len = minimum_console_loglevel; |
1504 | console_loglevel = len; | 1495 | console_loglevel = len; |
1505 | /* Implicitly re-enable logging to console */ | 1496 | /* Implicitly re-enable logging to console */ |
1506 | saved_console_loglevel = LOGLEVEL_DEFAULT; | 1497 | saved_console_loglevel = LOGLEVEL_DEFAULT; |
1507 | error = 0; | ||
1508 | break; | 1498 | break; |
1509 | /* Number of chars in the log buffer */ | 1499 | /* Number of chars in the log buffer */ |
1510 | case SYSLOG_ACTION_SIZE_UNREAD: | 1500 | case SYSLOG_ACTION_SIZE_UNREAD: |
@@ -1526,7 +1516,6 @@ int do_syslog(int type, char __user *buf, int len, int source) | |||
1526 | u64 seq = syslog_seq; | 1516 | u64 seq = syslog_seq; |
1527 | u32 idx = syslog_idx; | 1517 | u32 idx = syslog_idx; |
1528 | 1518 | ||
1529 | error = 0; | ||
1530 | while (seq < log_next_seq) { | 1519 | while (seq < log_next_seq) { |
1531 | struct printk_log *msg = log_from_idx(idx); | 1520 | struct printk_log *msg = log_from_idx(idx); |
1532 | 1521 | ||
@@ -1546,7 +1535,7 @@ int do_syslog(int type, char __user *buf, int len, int source) | |||
1546 | error = -EINVAL; | 1535 | error = -EINVAL; |
1547 | break; | 1536 | break; |
1548 | } | 1537 | } |
1549 | out: | 1538 | |
1550 | return error; | 1539 | return error; |
1551 | } | 1540 | } |
1552 | 1541 | ||