mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 18:13:04 +00:00
staging/lustre/lnet: Fix use after free in ksocknal_send
Call to ksocknal_launch_packet might schedule a callback that might free the just sent message, and so subsequent access to it via lntmsg->msg_vmflush goes to freed memory. Instead we'll just remember if we are in the vmflush thread and only restore if we happened to set mempressure flag. Signed-off-by: Oleg Drokin <oleg.drokin@intel.com> Reviewed-on: http://review.whamcloud.com/8667 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4360 Reviewed-by: Liang Zhen <liang.zhen@intel.com> Reviewed-by: Amir Shehata <amir.shehata@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
52481e4b00
commit
aadbacc7f2
@ -924,7 +924,7 @@ ksocknal_launch_packet (lnet_ni_t *ni, ksock_tx_t *tx, lnet_process_id_t id)
|
||||
int
|
||||
ksocknal_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
|
||||
{
|
||||
int mpflag = 0;
|
||||
int mpflag = 1;
|
||||
int type = lntmsg->msg_type;
|
||||
lnet_process_id_t target = lntmsg->msg_target;
|
||||
unsigned int payload_niov = lntmsg->msg_niov;
|
||||
@ -993,8 +993,9 @@ ksocknal_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
|
||||
|
||||
/* The first fragment will be set later in pro_pack */
|
||||
rc = ksocknal_launch_packet(ni, tx, target);
|
||||
if (lntmsg->msg_vmflush)
|
||||
if (!mpflag)
|
||||
cfs_memory_pressure_restore(mpflag);
|
||||
|
||||
if (rc == 0)
|
||||
return (0);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user