Skip to content

Commit

Permalink
net: esp{4,6}: get rid of struct esp_data
Browse files Browse the repository at this point in the history
struct esp_data consists of a single pointer, vanishing the need for it
to be a structure. Fold the pointer into 'data' direcly, removing one
level of pointer indirection.

Signed-off-by: Mathias Krause <mathias.krause@secunet.com>
Cc: Steffen Klassert <steffen.klassert@secunet.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: "David S. Miller" <davem@davemloft.net>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
  • Loading branch information
Mathias Krause authored and Steffen Klassert committed Oct 29, 2013
1 parent 123b0d1 commit 1c5ad13
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 58 deletions.
7 changes: 0 additions & 7 deletions include/net/esp.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,6 @@

#include <linux/skbuff.h>

struct crypto_aead;

struct esp_data {
/* Confidentiality & Integrity */
struct crypto_aead *aead;
};

void *pskb_put(struct sk_buff *skb, struct sk_buff *tail, int len);

struct ip_esp_hdr;
Expand Down
40 changes: 14 additions & 26 deletions net/ipv4/esp4.c
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,6 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb)
struct aead_givcrypt_request *req;
struct scatterlist *sg;
struct scatterlist *asg;
struct esp_data *esp;
struct sk_buff *trailer;
void *tmp;
u8 *iv;
Expand All @@ -139,8 +138,7 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb)

/* skb is pure payload to encrypt */

esp = x->data;
aead = esp->aead;
aead = x->data;
alen = crypto_aead_authsize(aead);

tfclen = 0;
Expand Down Expand Up @@ -278,8 +276,7 @@ static int esp_input_done2(struct sk_buff *skb, int err)
{
const struct iphdr *iph;
struct xfrm_state *x = xfrm_input_state(skb);
struct esp_data *esp = x->data;
struct crypto_aead *aead = esp->aead;
struct crypto_aead *aead = x->data;
int alen = crypto_aead_authsize(aead);
int hlen = sizeof(struct ip_esp_hdr) + crypto_aead_ivsize(aead);
int elen = skb->len - hlen;
Expand Down Expand Up @@ -374,8 +371,7 @@ static void esp_input_done(struct crypto_async_request *base, int err)
static int esp_input(struct xfrm_state *x, struct sk_buff *skb)
{
struct ip_esp_hdr *esph;
struct esp_data *esp = x->data;
struct crypto_aead *aead = esp->aead;
struct crypto_aead *aead = x->data;
struct aead_request *req;
struct sk_buff *trailer;
int elen = skb->len - sizeof(*esph) - crypto_aead_ivsize(aead);
Expand Down Expand Up @@ -457,8 +453,8 @@ static int esp_input(struct xfrm_state *x, struct sk_buff *skb)

static u32 esp4_get_mtu(struct xfrm_state *x, int mtu)
{
struct esp_data *esp = x->data;
u32 blksize = ALIGN(crypto_aead_blocksize(esp->aead), 4);
struct crypto_aead *aead = x->data;
u32 blksize = ALIGN(crypto_aead_blocksize(aead), 4);
unsigned int net_adj;

switch (x->props.mode) {
Expand All @@ -473,7 +469,7 @@ static u32 esp4_get_mtu(struct xfrm_state *x, int mtu)
BUG();
}

return ((mtu - x->props.header_len - crypto_aead_authsize(esp->aead) -
return ((mtu - x->props.header_len - crypto_aead_authsize(aead) -
net_adj) & ~(blksize - 1)) + net_adj - 2;
}

Expand Down Expand Up @@ -508,18 +504,16 @@ static void esp4_err(struct sk_buff *skb, u32 info)

static void esp_destroy(struct xfrm_state *x)
{
struct esp_data *esp = x->data;
struct crypto_aead *aead = x->data;

if (!esp)
if (!aead)
return;

crypto_free_aead(esp->aead);
kfree(esp);
crypto_free_aead(aead);
}

static int esp_init_aead(struct xfrm_state *x)
{
struct esp_data *esp = x->data;
struct crypto_aead *aead;
int err;

Expand All @@ -528,7 +522,7 @@ static int esp_init_aead(struct xfrm_state *x)
if (IS_ERR(aead))
goto error;

esp->aead = aead;
x->data = aead;

err = crypto_aead_setkey(aead, x->aead->alg_key,
(x->aead->alg_key_len + 7) / 8);
Expand All @@ -545,7 +539,6 @@ static int esp_init_aead(struct xfrm_state *x)

static int esp_init_authenc(struct xfrm_state *x)
{
struct esp_data *esp = x->data;
struct crypto_aead *aead;
struct crypto_authenc_key_param *param;
struct rtattr *rta;
Expand Down Expand Up @@ -580,7 +573,7 @@ static int esp_init_authenc(struct xfrm_state *x)
if (IS_ERR(aead))
goto error;

esp->aead = aead;
x->data = aead;

keylen = (x->aalg ? (x->aalg->alg_key_len + 7) / 8 : 0) +
(x->ealg->alg_key_len + 7) / 8 + RTA_SPACE(sizeof(*param));
Expand Down Expand Up @@ -635,16 +628,11 @@ static int esp_init_authenc(struct xfrm_state *x)

static int esp_init_state(struct xfrm_state *x)
{
struct esp_data *esp;
struct crypto_aead *aead;
u32 align;
int err;

esp = kzalloc(sizeof(*esp), GFP_KERNEL);
if (esp == NULL)
return -ENOMEM;

x->data = esp;
x->data = NULL;

if (x->aead)
err = esp_init_aead(x);
Expand All @@ -654,7 +642,7 @@ static int esp_init_state(struct xfrm_state *x)
if (err)
goto error;

aead = esp->aead;
aead = x->data;

x->props.header_len = sizeof(struct ip_esp_hdr) +
crypto_aead_ivsize(aead);
Expand All @@ -678,7 +666,7 @@ static int esp_init_state(struct xfrm_state *x)
}

align = ALIGN(crypto_aead_blocksize(aead), 4);
x->props.trailer_len = align + 1 + crypto_aead_authsize(esp->aead);
x->props.trailer_len = align + 1 + crypto_aead_authsize(aead);

error:
return err;
Expand Down
39 changes: 14 additions & 25 deletions net/ipv6/esp6.c
Original file line number Diff line number Diff line change
Expand Up @@ -164,10 +164,9 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb)
u8 *iv;
u8 *tail;
__be32 *seqhi;
struct esp_data *esp = x->data;

/* skb is pure payload to encrypt */
aead = esp->aead;
aead = x->data;
alen = crypto_aead_authsize(aead);

tfclen = 0;
Expand Down Expand Up @@ -269,8 +268,7 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb)
static int esp_input_done2(struct sk_buff *skb, int err)
{
struct xfrm_state *x = xfrm_input_state(skb);
struct esp_data *esp = x->data;
struct crypto_aead *aead = esp->aead;
struct crypto_aead *aead = x->data;
int alen = crypto_aead_authsize(aead);
int hlen = sizeof(struct ip_esp_hdr) + crypto_aead_ivsize(aead);
int elen = skb->len - hlen;
Expand Down Expand Up @@ -323,8 +321,7 @@ static void esp_input_done(struct crypto_async_request *base, int err)
static int esp6_input(struct xfrm_state *x, struct sk_buff *skb)
{
struct ip_esp_hdr *esph;
struct esp_data *esp = x->data;
struct crypto_aead *aead = esp->aead;
struct crypto_aead *aead = x->data;
struct aead_request *req;
struct sk_buff *trailer;
int elen = skb->len - sizeof(*esph) - crypto_aead_ivsize(aead);
Expand Down Expand Up @@ -412,16 +409,16 @@ static int esp6_input(struct xfrm_state *x, struct sk_buff *skb)

static u32 esp6_get_mtu(struct xfrm_state *x, int mtu)
{
struct esp_data *esp = x->data;
u32 blksize = ALIGN(crypto_aead_blocksize(esp->aead), 4);
struct crypto_aead *aead = x->data;
u32 blksize = ALIGN(crypto_aead_blocksize(aead), 4);
unsigned int net_adj;

if (x->props.mode != XFRM_MODE_TUNNEL)
net_adj = sizeof(struct ipv6hdr);
else
net_adj = 0;

return ((mtu - x->props.header_len - crypto_aead_authsize(esp->aead) -
return ((mtu - x->props.header_len - crypto_aead_authsize(aead) -
net_adj) & ~(blksize - 1)) + net_adj - 2;
}

Expand Down Expand Up @@ -452,18 +449,16 @@ static void esp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,

static void esp6_destroy(struct xfrm_state *x)
{
struct esp_data *esp = x->data;
struct crypto_aead *aead = x->data;

if (!esp)
if (!aead)
return;

crypto_free_aead(esp->aead);
kfree(esp);
crypto_free_aead(aead);
}

static int esp_init_aead(struct xfrm_state *x)
{
struct esp_data *esp = x->data;
struct crypto_aead *aead;
int err;

Expand All @@ -472,7 +467,7 @@ static int esp_init_aead(struct xfrm_state *x)
if (IS_ERR(aead))
goto error;

esp->aead = aead;
x->data = aead;

err = crypto_aead_setkey(aead, x->aead->alg_key,
(x->aead->alg_key_len + 7) / 8);
Expand All @@ -489,7 +484,6 @@ static int esp_init_aead(struct xfrm_state *x)

static int esp_init_authenc(struct xfrm_state *x)
{
struct esp_data *esp = x->data;
struct crypto_aead *aead;
struct crypto_authenc_key_param *param;
struct rtattr *rta;
Expand Down Expand Up @@ -524,7 +518,7 @@ static int esp_init_authenc(struct xfrm_state *x)
if (IS_ERR(aead))
goto error;

esp->aead = aead;
x->data = aead;

keylen = (x->aalg ? (x->aalg->alg_key_len + 7) / 8 : 0) +
(x->ealg->alg_key_len + 7) / 8 + RTA_SPACE(sizeof(*param));
Expand Down Expand Up @@ -579,19 +573,14 @@ static int esp_init_authenc(struct xfrm_state *x)

static int esp6_init_state(struct xfrm_state *x)
{
struct esp_data *esp;
struct crypto_aead *aead;
u32 align;
int err;

if (x->encap)
return -EINVAL;

esp = kzalloc(sizeof(*esp), GFP_KERNEL);
if (esp == NULL)
return -ENOMEM;

x->data = esp;
x->data = NULL;

if (x->aead)
err = esp_init_aead(x);
Expand All @@ -601,7 +590,7 @@ static int esp6_init_state(struct xfrm_state *x)
if (err)
goto error;

aead = esp->aead;
aead = x->data;

x->props.header_len = sizeof(struct ip_esp_hdr) +
crypto_aead_ivsize(aead);
Expand All @@ -621,7 +610,7 @@ static int esp6_init_state(struct xfrm_state *x)
}

align = ALIGN(crypto_aead_blocksize(aead), 4);
x->props.trailer_len = align + 1 + crypto_aead_authsize(esp->aead);
x->props.trailer_len = align + 1 + crypto_aead_authsize(aead);

error:
return err;
Expand Down

0 comments on commit 1c5ad13

Please sign in to comment.