File tree Expand file tree Collapse file tree 3 files changed +18
-10
lines changed Expand file tree Collapse file tree 3 files changed +18
-10
lines changed Original file line number Diff line number Diff line change @@ -286,6 +286,7 @@ static void handle_ksmbd_work(struct work_struct *wk)
286
286
static int queue_ksmbd_work (struct ksmbd_conn * conn )
287
287
{
288
288
struct ksmbd_work * work ;
289
+ int err ;
289
290
290
291
work = ksmbd_alloc_work_struct ();
291
292
if (!work ) {
@@ -297,7 +298,11 @@ static int queue_ksmbd_work(struct ksmbd_conn *conn)
297
298
work -> request_buf = conn -> request_buf ;
298
299
conn -> request_buf = NULL ;
299
300
300
- ksmbd_init_smb_server (work );
301
+ err = ksmbd_init_smb_server (work );
302
+ if (err ) {
303
+ ksmbd_free_work_struct (work );
304
+ return 0 ;
305
+ }
301
306
302
307
ksmbd_conn_enqueue_request (work );
303
308
atomic_inc (& conn -> r_count );
Original file line number Diff line number Diff line change @@ -388,26 +388,29 @@ static struct smb_version_cmds smb1_server_cmds[1] = {
388
388
[SMB_COM_NEGOTIATE_EX ] = { .proc = smb1_negotiate , },
389
389
};
390
390
391
- static void init_smb1_server (struct ksmbd_conn * conn )
391
+ static int init_smb1_server (struct ksmbd_conn * conn )
392
392
{
393
393
conn -> ops = & smb1_server_ops ;
394
394
conn -> cmds = smb1_server_cmds ;
395
395
conn -> max_cmds = ARRAY_SIZE (smb1_server_cmds );
396
+ return 0 ;
396
397
}
397
398
398
- void ksmbd_init_smb_server (struct ksmbd_work * work )
399
+ int ksmbd_init_smb_server (struct ksmbd_work * work )
399
400
{
400
401
struct ksmbd_conn * conn = work -> conn ;
401
402
__le32 proto ;
402
403
403
- if (conn -> need_neg == false)
404
- return ;
405
-
406
404
proto = * (__le32 * )((struct smb_hdr * )work -> request_buf )-> Protocol ;
405
+ if (conn -> need_neg == false) {
406
+ if (proto == SMB1_PROTO_NUMBER )
407
+ return - EINVAL ;
408
+ return 0 ;
409
+ }
410
+
407
411
if (proto == SMB1_PROTO_NUMBER )
408
- init_smb1_server (conn );
409
- else
410
- init_smb3_11_server (conn );
412
+ return init_smb1_server (conn );
413
+ return init_smb3_11_server (conn );
411
414
}
412
415
413
416
int ksmbd_populate_dot_dotdot_entries (struct ksmbd_work * work , int info_level ,
Original file line number Diff line number Diff line change @@ -427,7 +427,7 @@ bool ksmbd_smb_request(struct ksmbd_conn *conn);
427
427
428
428
int ksmbd_lookup_dialect_by_id (__le16 * cli_dialects , __le16 dialects_count );
429
429
430
- void ksmbd_init_smb_server (struct ksmbd_work * work );
430
+ int ksmbd_init_smb_server (struct ksmbd_work * work );
431
431
432
432
struct ksmbd_kstat ;
433
433
int ksmbd_populate_dot_dotdot_entries (struct ksmbd_work * work ,
You can’t perform that action at this time.
0 commit comments