Re: [PATCH V3] target: fix a race condition between login_work and the login thread

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/15/22 6:56 AM, Maurizio Lombardi wrote:
> In case a malicious initiator sends some random data immediately after a
> login PDU; the iscsi_target_sk_data_ready() callback will
> schedule the login_work and, at the same time,
> the negotiation may end without clearing the LOGIN_FLAGS_INITIAL_PDU flag
> (because no additional PDU exchanges are required to complete the login).
> 
> The login has been completed but the login_work function
> will find the LOGIN_FLAGS_INITIAL_PDU flag set and will
> never stop from rescheduling itself;
> at this point, if the initiator drops the connection, the iscsit_conn
> structure will be freed, login_work will dereference a released
> socket structure and the kernel crashes.
> 
> BUG: kernel NULL pointer dereference, address: 0000000000000230
> PF: supervisor write access in kernel mode
> PF: error_code(0x0002) - not-present page
> Workqueue: events iscsi_target_do_login_rx [iscsi_target_mod]
> RIP: 0010:_raw_read_lock_bh+0x15/0x30
> Call trace:
>  iscsi_target_do_login_rx+0x75/0x3f0 [iscsi_target_mod]
>  process_one_work+0x1e8/0x3c0
> 
> Fix this bug by forcing login_work to stop after the login has been
> completed and the socket callbacks have been restored.
> 
> Add a comment to clearify the return values of iscsi_target_do_login()
> 
> v3: cancel_delayed_work_sync() should be called by
>     iscsi_target_start_negotiation(), because the latter is only executed
>     in login_thread context
> 
> V2: remove an unnecessary call to cancel_delayed_work();
>     fix a potential race condition in iscsi_start_negotiation() and
>     in iscsi_target_do_login_rx()'s error paths
> 
> Signed-off-by: Maurizio Lombardi <mlombard@xxxxxxxxxx>

Reviewed-by: Mike Christie <michael.christie@xxxxxxxxxx>




[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux