2019-01-22 15:31:25

by Greg Kroah-Hartman

[permalink] [raw]
Subject: [PATCH] s390: kernel: no need to check return value of debugfs_create functions

When calling debugfs functions, there is no need to ever check the
return value. The function can work or not, but the code logic should
never do something different based on this.

Cc: Martin Schwidefsky <[email protected]>
Cc: Heiko Carstens <[email protected]>
Cc: Kees Cook <[email protected]>
Cc: Christian Borntraeger <[email protected]>
Cc: Hendrik Brueckner <[email protected]>
Cc: [email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
arch/s390/kernel/debug.c | 6 ------
arch/s390/kernel/kdebugfs.c | 2 --
arch/s390/kernel/sysinfo.c | 2 --
3 files changed, 10 deletions(-)

diff --git a/arch/s390/kernel/debug.c b/arch/s390/kernel/debug.c
index d374f9b218b4..0ebf08c3b35e 100644
--- a/arch/s390/kernel/debug.c
+++ b/arch/s390/kernel/debug.c
@@ -1056,12 +1056,6 @@ int debug_register_view(debug_info_t *id, struct debug_view *view)
mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
pde = debugfs_create_file(view->name, mode, id->debugfs_root_entry,
id, &debug_file_ops);
- if (!pde) {
- pr_err("Registering view %s/%s failed due to out of "
- "memory\n", id->name, view->name);
- rc = -1;
- goto out;
- }
spin_lock_irqsave(&id->lock, flags);
for (i = 0; i < DEBUG_MAX_VIEWS; i++) {
if (!id->views[i])
diff --git a/arch/s390/kernel/kdebugfs.c b/arch/s390/kernel/kdebugfs.c
index 2c46bd6c6fd2..33130c7daf55 100644
--- a/arch/s390/kernel/kdebugfs.c
+++ b/arch/s390/kernel/kdebugfs.c
@@ -9,8 +9,6 @@ EXPORT_SYMBOL(arch_debugfs_dir);
static int __init arch_kdebugfs_init(void)
{
arch_debugfs_dir = debugfs_create_dir("s390", NULL);
- if (IS_ERR(arch_debugfs_dir))
- arch_debugfs_dir = NULL;
return 0;
}
postcore_initcall(arch_kdebugfs_init);
diff --git a/arch/s390/kernel/sysinfo.c b/arch/s390/kernel/sysinfo.c
index 12f80d1f0415..2ac3c9b56a13 100644
--- a/arch/s390/kernel/sysinfo.c
+++ b/arch/s390/kernel/sysinfo.c
@@ -545,8 +545,6 @@ static __init int stsi_init_debugfs(void)
int lvl, i;

stsi_root = debugfs_create_dir("stsi", arch_debugfs_dir);
- if (IS_ERR_OR_NULL(stsi_root))
- return 0;
lvl = stsi(NULL, 0, 0, 0);
if (lvl > 0)
stsi_0_0_0 = lvl;
--
2.20.1



2019-01-22 16:27:43

by Heiko Carstens

[permalink] [raw]
Subject: Re: [PATCH] s390: kernel: no need to check return value of debugfs_create functions

On Tue, Jan 22, 2019 at 04:21:02PM +0100, Greg Kroah-Hartman wrote:
> When calling debugfs functions, there is no need to ever check the
> return value. The function can work or not, but the code logic should
> never do something different based on this.
>
> Cc: Martin Schwidefsky <[email protected]>
> Cc: Heiko Carstens <[email protected]>
> Cc: Kees Cook <[email protected]>
> Cc: Christian Borntraeger <[email protected]>
> Cc: Hendrik Brueckner <[email protected]>
> Cc: [email protected]
> Signed-off-by: Greg Kroah-Hartman <[email protected]>
> ---
> arch/s390/kernel/debug.c | 6 ------
> arch/s390/kernel/kdebugfs.c | 2 --
> arch/s390/kernel/sysinfo.c | 2 --
> 3 files changed, 10 deletions(-)
> diff --git a/arch/s390/kernel/sysinfo.c b/arch/s390/kernel/sysinfo.c
> index 12f80d1f0415..2ac3c9b56a13 100644
> --- a/arch/s390/kernel/sysinfo.c
> +++ b/arch/s390/kernel/sysinfo.c
> @@ -545,8 +545,6 @@ static __init int stsi_init_debugfs(void)
> int lvl, i;
>
> stsi_root = debugfs_create_dir("stsi", arch_debugfs_dir);
> - if (IS_ERR_OR_NULL(stsi_root))
> - return 0;

No objections, however will you also change the odd behaviour that
e.g. debugfs_create_file() returns -ENODEV instead of (the expected)
NULL pointer if CONFIG_DEBUGFS is disabled?

I do remember this since it caused at least one crash ;)

19cdd08ba155 ("[S390] qdio: fix broken pointer in case of CONFIG_DEBUG_FS is disabled").


2019-01-22 16:35:45

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH] s390: kernel: no need to check return value of debugfs_create functions

On Tue, Jan 22, 2019 at 05:24:54PM +0100, Heiko Carstens wrote:
> On Tue, Jan 22, 2019 at 04:21:02PM +0100, Greg Kroah-Hartman wrote:
> > When calling debugfs functions, there is no need to ever check the
> > return value. The function can work or not, but the code logic should
> > never do something different based on this.
> >
> > Cc: Martin Schwidefsky <[email protected]>
> > Cc: Heiko Carstens <[email protected]>
> > Cc: Kees Cook <[email protected]>
> > Cc: Christian Borntraeger <[email protected]>
> > Cc: Hendrik Brueckner <[email protected]>
> > Cc: [email protected]
> > Signed-off-by: Greg Kroah-Hartman <[email protected]>
> > ---
> > arch/s390/kernel/debug.c | 6 ------
> > arch/s390/kernel/kdebugfs.c | 2 --
> > arch/s390/kernel/sysinfo.c | 2 --
> > 3 files changed, 10 deletions(-)
> > diff --git a/arch/s390/kernel/sysinfo.c b/arch/s390/kernel/sysinfo.c
> > index 12f80d1f0415..2ac3c9b56a13 100644
> > --- a/arch/s390/kernel/sysinfo.c
> > +++ b/arch/s390/kernel/sysinfo.c
> > @@ -545,8 +545,6 @@ static __init int stsi_init_debugfs(void)
> > int lvl, i;
> >
> > stsi_root = debugfs_create_dir("stsi", arch_debugfs_dir);
> > - if (IS_ERR_OR_NULL(stsi_root))
> > - return 0;
>
> No objections, however will you also change the odd behaviour that
> e.g. debugfs_create_file() returns -ENODEV instead of (the expected)
> NULL pointer if CONFIG_DEBUGFS is disabled?

Nope. That is intentional.

> I do remember this since it caused at least one crash ;)

Which is why you shouldn't care about the return value of these
functions :)

> 19cdd08ba155 ("[S390] qdio: fix broken pointer in case of CONFIG_DEBUG_FS is disabled").

Odd, what crashes when passed an error pointer? What was someone trying
to do with those pointers? The only thing you can do with a return
value from a debugfs function is to pass it back into another debugfs
call. Sounds like someone wasn't doing that :(

Given that that patch was from 2.6.29, I think we are safe...

thanks,

greg k-h

2019-01-23 09:36:59

by Heiko Carstens

[permalink] [raw]
Subject: Re: [PATCH] s390: kernel: no need to check return value of debugfs_create functions

On Tue, Jan 22, 2019 at 05:33:37PM +0100, Greg Kroah-Hartman wrote:
> On Tue, Jan 22, 2019 at 05:24:54PM +0100, Heiko Carstens wrote:
> > On Tue, Jan 22, 2019 at 04:21:02PM +0100, Greg Kroah-Hartman wrote:
> > > When calling debugfs functions, there is no need to ever check the
> > > return value. The function can work or not, but the code logic should
> > > never do something different based on this.
> > >
> > > Cc: Martin Schwidefsky <[email protected]>
> > > Cc: Heiko Carstens <[email protected]>
> > > Cc: Kees Cook <[email protected]>
> > > Cc: Christian Borntraeger <[email protected]>
> > > Cc: Hendrik Brueckner <[email protected]>
> > > Cc: [email protected]
> > > Signed-off-by: Greg Kroah-Hartman <[email protected]>
> > > ---
> > > arch/s390/kernel/debug.c | 6 ------
> > > arch/s390/kernel/kdebugfs.c | 2 --
> > > arch/s390/kernel/sysinfo.c | 2 --
> > > 3 files changed, 10 deletions(-)
> > > diff --git a/arch/s390/kernel/sysinfo.c b/arch/s390/kernel/sysinfo.c
> > > index 12f80d1f0415..2ac3c9b56a13 100644
> > > --- a/arch/s390/kernel/sysinfo.c
> > > +++ b/arch/s390/kernel/sysinfo.c
> > > @@ -545,8 +545,6 @@ static __init int stsi_init_debugfs(void)
> > > int lvl, i;
> > >
> > > stsi_root = debugfs_create_dir("stsi", arch_debugfs_dir);
> > > - if (IS_ERR_OR_NULL(stsi_root))
> > > - return 0;
> >
> > No objections, however will you also change the odd behaviour that
> > e.g. debugfs_create_file() returns -ENODEV instead of (the expected)
> > NULL pointer if CONFIG_DEBUGFS is disabled?
>
> Nope. That is intentional.
>
> > I do remember this since it caused at least one crash ;)
>
> Which is why you shouldn't care about the return value of these
> functions :)
>
> > 19cdd08ba155 ("[S390] qdio: fix broken pointer in case of CONFIG_DEBUG_FS is disabled").
>
> Odd, what crashes when passed an error pointer? What was someone trying
> to do with those pointers? The only thing you can do with a return
> value from a debugfs function is to pass it back into another debugfs
> call. Sounds like someone wasn't doing that :(

I think it used to be this code that crashed:

static void remove_debugfs_entry(struct qdio_q *q)
{
int i;

for (i = 0; i < MAX_DEBUGFS_QUEUES; i++) {
if (!debugfs_queues[i])
continue;
-----> if (debugfs_queues[i]->d_inode->i_private == q) {
debugfs_remove(debugfs_queues[i]);
debugfs_queues[i] = NULL;
}
}
}

Which looks like a layering violation anyway. However this code is
gone, so everything should be fine.


2019-01-25 08:49:40

by Heiko Carstens

[permalink] [raw]
Subject: Re: [PATCH] s390: kernel: no need to check return value of debugfs_create functions

On Tue, Jan 22, 2019 at 04:21:02PM +0100, Greg Kroah-Hartman wrote:
> When calling debugfs functions, there is no need to ever check the
> return value. The function can work or not, but the code logic should
> never do something different based on this.
>
> Cc: Martin Schwidefsky <[email protected]>
> Cc: Heiko Carstens <[email protected]>
> Cc: Kees Cook <[email protected]>
> Cc: Christian Borntraeger <[email protected]>
> Cc: Hendrik Brueckner <[email protected]>
> Cc: [email protected]
> Signed-off-by: Greg Kroah-Hartman <[email protected]>
> ---
> arch/s390/kernel/debug.c | 6 ------
> arch/s390/kernel/kdebugfs.c | 2 --
> arch/s390/kernel/sysinfo.c | 2 --
> 3 files changed, 10 deletions(-)

Applied, thanks!