Lines Matching full:pas
32 struct psp_assoc *pas; in psp_validate_xmit() local
36 pas = psp_skb_get_assoc_rcu(skb); in psp_validate_xmit()
37 good = !pas || rcu_access_pointer(dev->psp_dev) == pas->psd; in psp_validate_xmit()
49 struct psp_assoc *pas; in psp_assoc_create() local
53 pas = kzalloc(struct_size(pas, drv_data, psd->caps->assoc_drv_spc), in psp_assoc_create()
55 if (!pas) in psp_assoc_create()
58 pas->psd = psd; in psp_assoc_create()
59 pas->dev_id = psd->id; in psp_assoc_create()
60 pas->generation = psd->generation; in psp_assoc_create()
62 refcount_set(&pas->refcnt, 1); in psp_assoc_create()
64 list_add_tail(&pas->assocs_list, &psd->active_assocs); in psp_assoc_create()
66 return pas; in psp_assoc_create()
69 static struct psp_assoc *psp_assoc_dummy(struct psp_assoc *pas) in psp_assoc_dummy() argument
71 struct psp_dev *psd = pas->psd; in psp_assoc_dummy()
76 sz = struct_size(pas, drv_data, psd->caps->assoc_drv_spc); in psp_assoc_dummy()
77 return kmemdup(pas, sz, GFP_KERNEL); in psp_assoc_dummy()
80 static int psp_dev_tx_key_add(struct psp_dev *psd, struct psp_assoc *pas, in psp_dev_tx_key_add() argument
83 return psd->ops->tx_key_add(psd, pas, extack); in psp_dev_tx_key_add()
86 void psp_dev_tx_key_del(struct psp_dev *psd, struct psp_assoc *pas) in psp_dev_tx_key_del() argument
88 if (pas->tx.spi) in psp_dev_tx_key_del()
89 psd->ops->tx_key_del(psd, pas); in psp_dev_tx_key_del()
90 list_del(&pas->assocs_list); in psp_dev_tx_key_del()
95 struct psp_assoc *pas = container_of(work, struct psp_assoc, work); in psp_assoc_free() local
96 struct psp_dev *psd = pas->psd; in psp_assoc_free()
100 psp_dev_tx_key_del(psd, pas); in psp_assoc_free()
103 kfree(pas); in psp_assoc_free()
108 struct psp_assoc *pas = container_of(head, struct psp_assoc, rcu); in psp_assoc_free_queue() local
110 INIT_WORK(&pas->work, psp_assoc_free); in psp_assoc_free_queue()
111 schedule_work(&pas->work); in psp_assoc_free_queue()
116 * @pas: association to release
118 void psp_assoc_put(struct psp_assoc *pas) in psp_assoc_put() argument
120 if (pas && refcount_dec_and_test(&pas->refcnt)) in psp_assoc_put()
121 call_rcu(&pas->rcu, psp_assoc_free_queue); in psp_assoc_put()
126 struct psp_assoc *pas = rcu_dereference_protected(sk->psp_assoc, 1); in psp_sk_assoc_free() local
129 psp_assoc_put(pas); in psp_sk_assoc_free()
132 int psp_sock_assoc_set_rx(struct sock *sk, struct psp_assoc *pas, in psp_sock_assoc_set_rx() argument
138 memcpy(&pas->rx, key, sizeof(*key)); in psp_sock_assoc_set_rx()
148 refcount_inc(&pas->refcnt); in psp_sock_assoc_set_rx()
149 rcu_assign_pointer(sk->psp_assoc, pas); in psp_sock_assoc_set_rx()
158 static int psp_sock_recv_queue_check(struct sock *sk, struct psp_assoc *pas) in psp_sock_recv_queue_check() argument
165 if (!psp_pse_matches_pas(pse, pas)) in psp_sock_recv_queue_check()
171 if (!psp_pse_matches_pas(pse, pas)) in psp_sock_recv_queue_check()
182 struct psp_assoc *pas, *dummy; in psp_sock_assoc_set_tx() local
187 pas = psp_sk_assoc(sk); in psp_sock_assoc_set_tx()
188 if (!pas) { in psp_sock_assoc_set_tx()
193 if (pas->psd != psd) { in psp_sock_assoc_set_tx()
198 if (pas->version != version) { in psp_sock_assoc_set_tx()
204 if (pas->tx.spi) { in psp_sock_assoc_set_tx()
210 err = psp_sock_recv_queue_check(sk, pas); in psp_sock_assoc_set_tx()
220 dummy = psp_assoc_dummy(pas); in psp_sock_assoc_set_tx()
231 memcpy(pas->drv_data, dummy->drv_data, psd->caps->assoc_drv_spc); in psp_sock_assoc_set_tx()
232 memcpy(&pas->tx, key, sizeof(*key)); in psp_sock_assoc_set_tx()
236 pas->upgrade_seq = tcp_sk(sk)->rcv_nxt; in psp_sock_assoc_set_tx()
251 struct psp_assoc *pas, *next; in psp_assocs_key_rotated() local
256 list_for_each_entry_safe(pas, next, &psd->prev_assocs, assocs_list) in psp_assocs_key_rotated()
257 pas->generation |= ~PSP_GEN_VALID_MASK; in psp_assocs_key_rotated()
266 struct psp_assoc *pas = psp_sk_assoc(sk); in psp_twsk_init() local
268 if (pas) in psp_twsk_init()
269 refcount_inc(&pas->refcnt); in psp_twsk_init()
270 rcu_assign_pointer(tw->psp_assoc, pas); in psp_twsk_init()
276 struct psp_assoc *pas = rcu_dereference_protected(tw->psp_assoc, 1); in psp_twsk_assoc_free() local
279 psp_assoc_put(pas); in psp_twsk_assoc_free()
284 struct psp_assoc *pas; in psp_reply_set_decrypted() local
287 pas = psp_sk_get_assoc_rcu(sk); in psp_reply_set_decrypted()
288 if (pas && pas->tx.spi) in psp_reply_set_decrypted()