* [PATCH] printk: Clean up do_syslog() error handling
@ 2017-07-30 3:36 Nikitas Angelinas
2017-08-01 7:38 ` Sergey Senozhatsky
2017-08-15 15:03 ` Petr Mladek
0 siblings, 2 replies; 3+ messages in thread
From: Nikitas Angelinas @ 2017-07-30 3:36 UTC (permalink / raw)
To: Petr Mladek, Sergey Senozhatsky, Steven Rostedt
Cc: linux-kernel, nikitas.angelinas
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.
Signed-off-by: Nikitas Angelinas <nikitas.angelinas@gmail.com>
---
kernel/printk/printk.c | 35 ++++++++++++-----------------------
1 file 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)
error = check_syslog_permissions(type, source);
if (error)
- goto out;
+ return error;
switch (type) {
case SYSLOG_ACTION_CLOSE: /* Close log */
@@ -1443,20 +1443,16 @@ int do_syslog(int type, char __user *buf, int len, int source)
case SYSLOG_ACTION_OPEN: /* Open log */
break;
case SYSLOG_ACTION_READ: /* Read from log */
- error = -EINVAL;
if (!buf || len < 0)
- goto out;
- error = 0;
+ return -EINVAL;
if (!len)
- goto out;
- if (!access_ok(VERIFY_WRITE, buf, len)) {
- error = -EFAULT;
- goto out;
- }
+ return 0;
+ if (!access_ok(VERIFY_WRITE, buf, len))
+ return -EFAULT;
error = wait_event_interruptible(log_wait,
syslog_seq != log_next_seq);
if (error)
- goto out;
+ return error;
error = syslog_print(buf, len);
break;
/* Read/clear last kernel messages */
@@ -1465,16 +1461,12 @@ int do_syslog(int type, char __user *buf, int len, int source)
/* FALL THRU */
/* Read last kernel messages */
case SYSLOG_ACTION_READ_ALL:
- error = -EINVAL;
if (!buf || len < 0)
- goto out;
- error = 0;
+ return -EINVAL;
if (!len)
- goto out;
- if (!access_ok(VERIFY_WRITE, buf, len)) {
- error = -EFAULT;
- goto out;
- }
+ return 0;
+ if (!access_ok(VERIFY_WRITE, buf, len))
+ return -EFAULT;
error = syslog_print_all(buf, len, clear);
break;
/* Clear ring buffer */
@@ -1496,15 +1488,13 @@ int do_syslog(int type, char __user *buf, int len, int source)
break;
/* Set level of messages printed to console */
case SYSLOG_ACTION_CONSOLE_LEVEL:
- error = -EINVAL;
if (len < 1 || len > 8)
- goto out;
+ return -EINVAL;
if (len < minimum_console_loglevel)
len = minimum_console_loglevel;
console_loglevel = len;
/* Implicitly re-enable logging to console */
saved_console_loglevel = LOGLEVEL_DEFAULT;
- error = 0;
break;
/* Number of chars in the log buffer */
case SYSLOG_ACTION_SIZE_UNREAD:
@@ -1526,7 +1516,6 @@ int do_syslog(int type, char __user *buf, int len, int source)
u64 seq = syslog_seq;
u32 idx = syslog_idx;
- error = 0;
while (seq < log_next_seq) {
struct printk_log *msg = log_from_idx(idx);
@@ -1546,7 +1535,7 @@ int do_syslog(int type, char __user *buf, int len, int source)
error = -EINVAL;
break;
}
-out:
+
return error;
}
--
2.11.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] printk: Clean up do_syslog() error handling
2017-07-30 3:36 [PATCH] printk: Clean up do_syslog() error handling Nikitas Angelinas
@ 2017-08-01 7:38 ` Sergey Senozhatsky
2017-08-15 15:03 ` Petr Mladek
1 sibling, 0 replies; 3+ messages in thread
From: Sergey Senozhatsky @ 2017-08-01 7:38 UTC (permalink / raw)
To: Nikitas Angelinas
Cc: Petr Mladek, Sergey Senozhatsky, Steven Rostedt, linux-kernel
On (07/29/17 20:36), Nikitas Angelinas wrote:
> 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.
>
> Signed-off-by: Nikitas Angelinas <nikitas.angelinas@gmail.com>
looks good to me,
Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
// p.s. Petr is on vacation now
-ss
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] printk: Clean up do_syslog() error handling
2017-07-30 3:36 [PATCH] printk: Clean up do_syslog() error handling Nikitas Angelinas
2017-08-01 7:38 ` Sergey Senozhatsky
@ 2017-08-15 15:03 ` Petr Mladek
1 sibling, 0 replies; 3+ messages in thread
From: Petr Mladek @ 2017-08-15 15:03 UTC (permalink / raw)
To: Nikitas Angelinas; +Cc: Sergey Senozhatsky, Steven Rostedt, linux-kernel
On Sat 2017-07-29 20:36:36, Nikitas Angelinas wrote:
> 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.
>
> Signed-off-by: Nikitas Angelinas <nikitas.angelinas@gmail.com>
The code looks better. Also the patch looks correct.
Acked-by: Petr Mladek <pmladek@suse.com>
I have pushed it into for-4.14 branch.
Best Regards,
Petr
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-08-15 15:03 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-30 3:36 [PATCH] printk: Clean up do_syslog() error handling Nikitas Angelinas
2017-08-01 7:38 ` Sergey Senozhatsky
2017-08-15 15:03 ` Petr Mladek
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.