linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] doc:kmsg: explictly state the return value in case of SEEK_CUR
@ 2020-07-10 17:44 Bruno Meneguele
  2020-07-13  2:25 ` Sergey Senozhatsky
  0 siblings, 1 reply; 4+ messages in thread
From: Bruno Meneguele @ 2020-07-10 17:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: pmladek, sergey.senozhatsky, torvalds, Jason, Bruno Meneguele

The commit 625d3449788f ("Revert "kernel/printk: add kmsg SEEK_CUR
handling"") reverted a change done to the return value in case a SEEK_CUR
operation was performed for kmsg buffer based on the fact that different
userspace apps were handling the new return value (-ESPIPE) in different
ways, breaking them.

At the same time -ESPIPE was the wrong decision because kmsg /does support/
seek() but doesn't follow the "normal" behavior userspace is used to.
Because of that and also considering the time -EINVAL has been used, it was
decided to keep this way to avoid more userspace breakage.

This patch adds an official statement to the kmsg documentation pointing to
the current return value for SEEK_CUR, -EINVAL, thus userspace libraries
and apps can refer to it for a definitive guide on what to expect.

Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
---
Changelog:
v2:
	- Changed wording to Documentation/ file and also added some doc
	directly to the code (suggested by Petr)

 Documentation/ABI/testing/dev-kmsg | 11 +++++++++++
 kernel/printk/printk.c             |  8 ++++++++
 2 files changed, 19 insertions(+)

diff --git a/Documentation/ABI/testing/dev-kmsg b/Documentation/ABI/testing/dev-kmsg
index f307506eb54c..79f007cdcd41 100644
--- a/Documentation/ABI/testing/dev-kmsg
+++ b/Documentation/ABI/testing/dev-kmsg
@@ -56,6 +56,17 @@ Description:	The /dev/kmsg character device node provides userspace access
 		  seek after the last record available at the time
 		  the last SYSLOG_ACTION_CLEAR was issued.
 
+		Other seek operations or offsets are not supported because of
+		the special behavior this device has. The device allows to read
+		or write only whole variable lenght messages (records) that are
+		stored in a ring buffer.
+
+		Because of the non-standard behavior also the error values are
+		non-standard. -ESPIPE is returned for non-zero offset. -EINVAL
+		is returned for other operations, e.g. SEEK_CUR. This behavior
+		and values are historical and could not be modified without the
+		risk of breaking userspace.
+
 		The output format consists of a prefix carrying the syslog
 		prefix including priority and facility, the 64 bit message
 		sequence number and the monotonic timestamp in microseconds,
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index b71eaf5f5a86..4c3a0822b705 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -943,6 +943,14 @@ static ssize_t devkmsg_read(struct file *file, char __user *buf,
 	return ret;
 }
 
+/*
+ * Be careful when modifying this function!!!
+ *
+ * Only few operations are supported because the device works only with the
+ * entire variable length messages (records). Non-standard values are
+ * returned in the other cases and has been this way for quite some time.
+ * User space applications might depend on this behavior.
+ */
 static loff_t devkmsg_llseek(struct file *file, loff_t offset, int whence)
 {
 	struct devkmsg_user *user = file->private_data;
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] doc:kmsg: explictly state the return value in case of SEEK_CUR
  2020-07-10 17:44 [PATCH v2] doc:kmsg: explictly state the return value in case of SEEK_CUR Bruno Meneguele
@ 2020-07-13  2:25 ` Sergey Senozhatsky
  2020-07-13 13:15   ` Petr Mladek
  0 siblings, 1 reply; 4+ messages in thread
From: Sergey Senozhatsky @ 2020-07-13  2:25 UTC (permalink / raw)
  To: Bruno Meneguele
  Cc: linux-kernel, pmladek, sergey.senozhatsky, torvalds, Jason

On (20/07/10 14:44), Bruno Meneguele wrote:
> The commit 625d3449788f ("Revert "kernel/printk: add kmsg SEEK_CUR
> handling"") reverted a change done to the return value in case a SEEK_CUR
> operation was performed for kmsg buffer based on the fact that different
> userspace apps were handling the new return value (-ESPIPE) in different
> ways, breaking them.
> 
> At the same time -ESPIPE was the wrong decision because kmsg /does support/
> seek() but doesn't follow the "normal" behavior userspace is used to.
> Because of that and also considering the time -EINVAL has been used, it was
> decided to keep this way to avoid more userspace breakage.
> 
> This patch adds an official statement to the kmsg documentation pointing to
> the current return value for SEEK_CUR, -EINVAL, thus userspace libraries
> and apps can refer to it for a definitive guide on what to expect.
> 
> Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>

Looks good to me,
Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>

	-ss

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] doc:kmsg: explictly state the return value in case of SEEK_CUR
  2020-07-13  2:25 ` Sergey Senozhatsky
@ 2020-07-13 13:15   ` Petr Mladek
  2020-07-13 13:30     ` Bruno Meneguele
  0 siblings, 1 reply; 4+ messages in thread
From: Petr Mladek @ 2020-07-13 13:15 UTC (permalink / raw)
  To: Sergey Senozhatsky; +Cc: Bruno Meneguele, linux-kernel, torvalds, Jason

On Mon 2020-07-13 11:25:58, Sergey Senozhatsky wrote:
> On (20/07/10 14:44), Bruno Meneguele wrote:
> > The commit 625d3449788f ("Revert "kernel/printk: add kmsg SEEK_CUR
> > handling"") reverted a change done to the return value in case a SEEK_CUR
> > operation was performed for kmsg buffer based on the fact that different
> > userspace apps were handling the new return value (-ESPIPE) in different
> > ways, breaking them.
> > 
> > At the same time -ESPIPE was the wrong decision because kmsg /does support/
> > seek() but doesn't follow the "normal" behavior userspace is used to.
> > Because of that and also considering the time -EINVAL has been used, it was
> > decided to keep this way to avoid more userspace breakage.
> > 
> > This patch adds an official statement to the kmsg documentation pointing to
> > the current return value for SEEK_CUR, -EINVAL, thus userspace libraries
> > and apps can refer to it for a definitive guide on what to expect.
> > 
> > Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
> 
> Looks good to me,
> Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>

The patch is committed in printk/linux.git, branch for-5.9.

Thanks for v2.

Best Regards,
Petr

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] doc:kmsg: explictly state the return value in case of SEEK_CUR
  2020-07-13 13:15   ` Petr Mladek
@ 2020-07-13 13:30     ` Bruno Meneguele
  0 siblings, 0 replies; 4+ messages in thread
From: Bruno Meneguele @ 2020-07-13 13:30 UTC (permalink / raw)
  To: Petr Mladek; +Cc: Sergey Senozhatsky, linux-kernel, torvalds, Jason

[-- Attachment #1: Type: text/plain, Size: 1440 bytes --]

On Mon, Jul 13, 2020 at 03:15:09PM +0200, Petr Mladek wrote:
> On Mon 2020-07-13 11:25:58, Sergey Senozhatsky wrote:
> > On (20/07/10 14:44), Bruno Meneguele wrote:
> > > The commit 625d3449788f ("Revert "kernel/printk: add kmsg SEEK_CUR
> > > handling"") reverted a change done to the return value in case a SEEK_CUR
> > > operation was performed for kmsg buffer based on the fact that different
> > > userspace apps were handling the new return value (-ESPIPE) in different
> > > ways, breaking them.
> > > 
> > > At the same time -ESPIPE was the wrong decision because kmsg /does support/
> > > seek() but doesn't follow the "normal" behavior userspace is used to.
> > > Because of that and also considering the time -EINVAL has been used, it was
> > > decided to keep this way to avoid more userspace breakage.
> > > 
> > > This patch adds an official statement to the kmsg documentation pointing to
> > > the current return value for SEEK_CUR, -EINVAL, thus userspace libraries
> > > and apps can refer to it for a definitive guide on what to expect.
> > > 
> > > Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
> > 
> > Looks good to me,
> > Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
> 
> The patch is committed in printk/linux.git, branch for-5.9.
> 
> Thanks for v2.
> 
> Best Regards,
> Petr
> 

Thanks Sergey and Petr.

-- 
bmeneg 
PGP Key: http://bmeneg.com/pubkey.txt

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-07-13 13:30 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-10 17:44 [PATCH v2] doc:kmsg: explictly state the return value in case of SEEK_CUR Bruno Meneguele
2020-07-13  2:25 ` Sergey Senozhatsky
2020-07-13 13:15   ` Petr Mladek
2020-07-13 13:30     ` Bruno Meneguele

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).