mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-19 20:12:32 +00:00
7ff84910c6
Commit 6930bcbfb6ce dropped the setting of the file_lock range when decoding a nlm_lock off the wire. This causes the client side grant callback to miss matching blocks and reject the lock, only to rerequest it 30s later. Add a helper function to set the file_lock range from the start and end values that the protocol uses, and have the nlm_lock decoder call that to set up the file_lock args properly. Fixes: 6930bcbfb6ce ("lockd: detect and reject lock arguments that overflow") Reported-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Jeff Layton <jlayton@kernel.org> Tested-by: Amir Goldstein <amir73il@gmail.com> Cc: stable@vger.kernel.org #6.0 Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
44 lines
1.7 KiB
C
44 lines
1.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* linux/include/linux/lockd/xdr4.h
|
|
*
|
|
* XDR types for the NLM protocol
|
|
*
|
|
* Copyright (C) 1996 Olaf Kirch <okir@monad.swb.de>
|
|
*/
|
|
|
|
#ifndef LOCKD_XDR4_H
|
|
#define LOCKD_XDR4_H
|
|
|
|
#include <linux/fs.h>
|
|
#include <linux/nfs.h>
|
|
#include <linux/sunrpc/xdr.h>
|
|
#include <linux/lockd/xdr.h>
|
|
|
|
/* error codes new to NLMv4 */
|
|
#define nlm4_deadlock cpu_to_be32(NLM_DEADLCK)
|
|
#define nlm4_rofs cpu_to_be32(NLM_ROFS)
|
|
#define nlm4_stale_fh cpu_to_be32(NLM_STALE_FH)
|
|
#define nlm4_fbig cpu_to_be32(NLM_FBIG)
|
|
#define nlm4_failed cpu_to_be32(NLM_FAILED)
|
|
|
|
void nlm4svc_set_file_lock_range(struct file_lock *fl, u64 off, u64 len);
|
|
bool nlm4svc_decode_void(struct svc_rqst *rqstp, struct xdr_stream *xdr);
|
|
bool nlm4svc_decode_testargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
|
|
bool nlm4svc_decode_lockargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
|
|
bool nlm4svc_decode_cancargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
|
|
bool nlm4svc_decode_unlockargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
|
|
bool nlm4svc_decode_res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
|
|
bool nlm4svc_decode_reboot(struct svc_rqst *rqstp, struct xdr_stream *xdr);
|
|
bool nlm4svc_decode_shareargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
|
|
bool nlm4svc_decode_notify(struct svc_rqst *rqstp, struct xdr_stream *xdr);
|
|
|
|
bool nlm4svc_encode_testres(struct svc_rqst *rqstp, struct xdr_stream *xdr);
|
|
bool nlm4svc_encode_res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
|
|
bool nlm4svc_encode_void(struct svc_rqst *rqstp, struct xdr_stream *xdr);
|
|
bool nlm4svc_encode_shareres(struct svc_rqst *rqstp, struct xdr_stream *xdr);
|
|
|
|
extern const struct rpc_version nlm_version4;
|
|
|
|
#endif /* LOCKD_XDR4_H */
|