lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20150724061630.49a4ae80@tlielax.poochiereds.net>
Date:	Fri, 24 Jul 2015 06:16:30 -0400
From:	Jeff Layton <jlayton@...chiereds.net>
To:	Nicholas Krause <xerofoify@...il.com>
Cc:	viro@...iv.linux.org.uk, bfields@...ldses.org,
	linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] fs:Fix error handling in the function time_out_leases

On Thu, 23 Jul 2015 22:57:57 -0400
Nicholas Krause <xerofoify@...il.com> wrote:

> This fixes error handling in the function time_out_leases by
> checking if the call to the function lease_modify failed in
> both if statements in this function by checking its return
> value for a error code and if so print to the console that
> modifying the file lock's lease has failed on the inode
> pointer argument befor returning immediately to this function's
> caller as we cannot continue here.
> 
> Signed-off-by: Nicholas Krause <xerofoify@...il.com>
> ---
>  fs/locks.c | 16 ++++++++++++----
>  1 file changed, 12 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/locks.c b/fs/locks.c
> index d3d558b..779754a 100644
> --- a/fs/locks.c
> +++ b/fs/locks.c
> @@ -1341,10 +1341,18 @@ static void time_out_leases(struct inode *inode, struct list_head *dispose)
>  
>  	list_for_each_entry_safe(fl, tmp, &ctx->flc_lease, fl_list) {
>  		trace_time_out_leases(inode, fl);
> -		if (past_time(fl->fl_downgrade_time))
> -			lease_modify(fl, F_RDLCK, dispose);
> -		if (past_time(fl->fl_break_time))
> -			lease_modify(fl, F_UNLCK, dispose);

lease_modify will only fail if the "arg" that it's passed is bogus, and
that's clearly not the case in these callers. What might be better is
to make a lease_modify variant that's a void return and that throws a
WARN when "arg" is bad.

I'd suggest just making lease_modify itself a void return, but it's
also the stock lm_change callback, and that prototype requires an int
return function.

> +		if (past_time(fl->fl_downgrade_time)) {
> +			if (lease_modify(fl, F_RDLCK, dispose)) {
> +				pr_err("Unable to modify lease on %p\n file lock\n", fl);

A couple of nits here: printing out the pointer value won't generally be
helpful in an ERR level log message. Also, there's no need to embed a
newline in the middle of the message. That can make for an ugly log
message in syslog or the equivalent.
 
> +				return;
> +			}
> +		}
> +		if (past_time(fl->fl_break_time)) {
> +			if (lease_modify(fl, F_UNLCK, dispose)) {
> +				pr_err("Unable to modify lease on
> %p\n file lock\n", fl);
> +				return;
> +			}
> +		}
>  	}
>  }
>  

-- 
Jeff Layton <jlayton@...chiereds.net>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ