File tree Expand file tree Collapse file tree 2 files changed +14
-1
lines changed Expand file tree Collapse file tree 2 files changed +14
-1
lines changed Original file line number Diff line number Diff line change @@ -76,6 +76,8 @@ int af_alg_register_type(const struct af_alg_type *type)
76
76
goto unlock ;
77
77
78
78
type -> ops -> owner = THIS_MODULE ;
79
+ if (type -> ops_nokey )
80
+ type -> ops_nokey -> owner = THIS_MODULE ;
79
81
node -> type = type ;
80
82
list_add (& node -> list , & alg_types );
81
83
err = 0 ;
@@ -267,6 +269,7 @@ int af_alg_accept(struct sock *sk, struct socket *newsock)
267
269
const struct af_alg_type * type ;
268
270
struct sock * sk2 ;
269
271
int err ;
272
+ bool nokey ;
270
273
271
274
lock_sock (sk );
272
275
type = ask -> type ;
@@ -285,19 +288,27 @@ int af_alg_accept(struct sock *sk, struct socket *newsock)
285
288
security_sk_clone (sk , sk2 );
286
289
287
290
err = type -> accept (ask -> private , sk2 );
291
+
292
+ nokey = err == - ENOKEY ;
293
+ if (nokey && type -> accept_nokey )
294
+ err = type -> accept_nokey (ask -> private , sk2 );
295
+
288
296
if (err )
289
297
goto unlock ;
290
298
291
299
sk2 -> sk_family = PF_ALG ;
292
300
293
- if (!ask -> refcnt ++ )
301
+ if (nokey || !ask -> refcnt ++ )
294
302
sock_hold (sk );
295
303
alg_sk (sk2 )-> parent = sk ;
296
304
alg_sk (sk2 )-> type = type ;
297
305
298
306
newsock -> ops = type -> ops ;
299
307
newsock -> state = SS_CONNECTED ;
300
308
309
+ if (nokey )
310
+ newsock -> ops = type -> ops_nokey ;
311
+
301
312
err = 0 ;
302
313
303
314
unlock :
Original file line number Diff line number Diff line change @@ -52,9 +52,11 @@ struct af_alg_type {
52
52
void (* release )(void * private );
53
53
int (* setkey )(void * private , const u8 * key , unsigned int keylen );
54
54
int (* accept )(void * private , struct sock * sk );
55
+ int (* accept_nokey )(void * private , struct sock * sk );
55
56
int (* setauthsize )(void * private , unsigned int authsize );
56
57
57
58
struct proto_ops * ops ;
59
+ struct proto_ops * ops_nokey ;
58
60
struct module * owner ;
59
61
char name [14 ];
60
62
};
You can’t perform that action at this time.
0 commit comments