Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
faedca65
Commit
faedca65
authored
Apr 08, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/davem/net-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
da220b09
75552d68
Changes
26
Show whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
136 additions
and
70 deletions
+136
-70
drivers/net/8139cp.c
drivers/net/8139cp.c
+1
-1
drivers/net/acenic.c
drivers/net/acenic.c
+1
-1
drivers/net/e100/e100_main.c
drivers/net/e100/e100_main.c
+2
-2
drivers/net/sungem.c
drivers/net/sungem.c
+1
-1
drivers/net/sunhme.c
drivers/net/sunhme.c
+1
-1
drivers/net/tg3.c
drivers/net/tg3.c
+6
-6
drivers/net/typhoon.c
drivers/net/typhoon.c
+1
-1
include/linux/irda.h
include/linux/irda.h
+2
-0
include/linux/net.h
include/linux/net.h
+4
-1
include/linux/netlink.h
include/linux/netlink.h
+2
-0
include/net/tcp.h
include/net/tcp.h
+15
-0
include/net/xfrm.h
include/net/xfrm.h
+1
-0
net/8021q/vlan.c
net/8021q/vlan.c
+11
-7
net/8021q/vlan_dev.c
net/8021q/vlan_dev.c
+0
-1
net/core/datagram.c
net/core/datagram.c
+2
-2
net/core/skbuff.c
net/core/skbuff.c
+5
-5
net/ipv4/af_inet.c
net/ipv4/af_inet.c
+2
-0
net/ipv4/ah.c
net/ipv4/ah.c
+2
-1
net/ipv4/esp.c
net/ipv4/esp.c
+2
-0
net/ipv4/proc.c
net/ipv4/proc.c
+9
-3
net/ipv4/tcp_output.c
net/ipv4/tcp_output.c
+1
-1
net/ipv6/ah6.c
net/ipv6/ah6.c
+2
-2
net/ipv6/esp6.c
net/ipv6/esp6.c
+2
-1
net/xfrm/xfrm_algo.c
net/xfrm/xfrm_algo.c
+2
-2
net/xfrm/xfrm_policy.c
net/xfrm/xfrm_policy.c
+2
-0
net/xfrm/xfrm_state.c
net/xfrm/xfrm_state.c
+57
-31
No files found.
drivers/net/8139cp.c
View file @
faedca65
...
...
@@ -826,7 +826,7 @@ static int cp_start_xmit (struct sk_buff *skb, struct net_device *dev)
* Otherwise we could race with the device.
*/
first_eor
=
eor
;
first_len
=
skb
->
len
-
skb
->
data_len
;
first_len
=
skb
_headlen
(
skb
)
;
first_mapping
=
pci_map_single
(
cp
->
pdev
,
skb
->
data
,
first_len
,
PCI_DMA_TODEVICE
);
cp
->
tx_skb
[
entry
].
skb
=
skb
;
...
...
drivers/net/acenic.c
View file @
faedca65
...
...
@@ -2829,7 +2829,7 @@ static int ace_start_xmit(struct sk_buff *skb, struct net_device *dev)
int
i
,
len
=
0
;
mapping
=
ace_map_tx_skb
(
ap
,
skb
,
NULL
,
idx
);
flagsize
=
(
(
skb
->
len
-
skb
->
data_len
)
<<
16
);
flagsize
=
(
skb_headlen
(
skb
)
<<
16
);
if
(
skb
->
ip_summed
==
CHECKSUM_HW
)
flagsize
|=
BD_FLG_TCP_UDP_SUM
;
#if ACENIC_DO_VLAN
...
...
drivers/net/e100/e100_main.c
View file @
faedca65
...
...
@@ -2199,10 +2199,10 @@ e100_prepare_xmit_buff(struct e100_private *bdp, struct sk_buff *skb)
(
tcb
->
tbd_ptr
)
->
tbd_buf_addr
=
cpu_to_le32
(
pci_map_single
(
bdp
->
pdev
,
skb
->
data
,
(
skb
->
len
-
skb
->
data_len
),
skb_headlen
(
skb
),
PCI_DMA_TODEVICE
));
(
tcb
->
tbd_ptr
)
->
tbd_buf_cnt
=
cpu_to_le16
(
skb
->
len
-
skb
->
data_len
);
cpu_to_le16
(
skb
_headlen
(
skb
)
);
for
(
i
=
0
;
i
<
skb_shinfo
(
skb
)
->
nr_frags
;
i
++
,
tbd_arr_ptr
++
,
frag
++
)
{
...
...
drivers/net/sungem.c
View file @
faedca65
...
...
@@ -894,7 +894,7 @@ static int gem_start_xmit(struct sk_buff *skb, struct net_device *dev)
/* We must give this initial chunk to the device last.
* Otherwise we could race with the device.
*/
first_len
=
skb
->
len
-
skb
->
data_len
;
first_len
=
skb
_headlen
(
skb
)
;
first_mapping
=
pci_map_page
(
gp
->
pdev
,
virt_to_page
(
skb
->
data
),
((
unsigned
long
)
skb
->
data
&
~
PAGE_MASK
),
first_len
,
PCI_DMA_TODEVICE
);
...
...
drivers/net/sunhme.c
View file @
faedca65
...
...
@@ -2319,7 +2319,7 @@ static int happy_meal_start_xmit(struct sk_buff *skb, struct net_device *dev)
/* We must give this initial chunk to the device last.
* Otherwise we could race with the device.
*/
first_len
=
skb
->
len
-
skb
->
data_len
;
first_len
=
skb
_headlen
(
skb
)
;
first_mapping
=
hme_dma_map
(
hp
,
skb
->
data
,
first_len
,
DMA_TODEVICE
);
entry
=
NEXT_TX
(
entry
);
...
...
drivers/net/tg3.c
View file @
faedca65
...
...
@@ -1751,7 +1751,7 @@ static void tg3_tx(struct tg3 *tp)
pci_unmap_single
(
tp
->
pdev
,
pci_unmap_addr
(
ri
,
mapping
),
(
skb
->
len
-
skb
->
data_len
),
skb_headlen
(
skb
),
PCI_DMA_TODEVICE
);
ri
->
skb
=
NULL
;
...
...
@@ -2316,7 +2316,7 @@ static int tigon3_4gb_hwbug_workaround(struct tg3 *tp, struct sk_buff *skb,
int
len
;
if
(
i
==
0
)
len
=
skb
->
len
-
skb
->
data_len
;
len
=
skb
_headlen
(
skb
)
;
else
len
=
skb_shinfo
(
skb
)
->
frags
[
i
-
1
].
size
;
pci_unmap_single
(
tp
->
pdev
,
...
...
@@ -2401,7 +2401,7 @@ static int tg3_start_xmit_4gbug(struct sk_buff *skb, struct net_device *dev)
int
would_hit_hwbug
;
unsigned
long
flags
;
len
=
(
skb
->
len
-
skb
->
data_len
);
len
=
skb_headlen
(
skb
);
/* No BH disabling for tx_lock here. We are running in BH disabled
* context and TX reclaim runs via tp->poll inside of a software
...
...
@@ -2520,7 +2520,7 @@ static int tg3_start_xmit_4gbug(struct sk_buff *skb, struct net_device *dev)
i
=
0
;
while
(
entry
!=
last_plus_one
)
{
if
(
i
==
0
)
len
=
skb
->
len
-
skb
->
data_len
;
len
=
skb
_headlen
(
skb
)
;
else
len
=
skb_shinfo
(
skb
)
->
frags
[
i
-
1
].
size
;
...
...
@@ -2593,7 +2593,7 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
u32
len
,
entry
,
base_flags
,
mss
;
unsigned
long
flags
;
len
=
(
skb
->
len
-
skb
->
data_len
);
len
=
skb_headlen
(
skb
);
/* No BH disabling for tx_lock here. We are running in BH disabled
* context and TX reclaim runs via tp->poll inside of a software
...
...
@@ -2829,7 +2829,7 @@ static void tg3_free_rings(struct tg3 *tp)
pci_unmap_single
(
tp
->
pdev
,
pci_unmap_addr
(
txp
,
mapping
),
(
skb
->
len
-
skb
->
data_len
),
skb_headlen
(
skb
),
PCI_DMA_TODEVICE
);
txp
->
skb
=
NULL
;
...
...
drivers/net/typhoon.c
View file @
faedca65
...
...
@@ -844,7 +844,7 @@ typhoon_start_tx(struct sk_buff *skb, struct net_device *dev)
}
else
{
int
i
,
len
;
len
=
skb
->
len
-
skb
->
data_len
;
len
=
skb
_headlen
(
skb
)
;
skb_dma
=
pci_map_single
(
tp
->
tx_pdev
,
skb
->
data
,
len
,
PCI_DMA_TODEVICE
);
txd
->
flags
=
TYPHOON_FRAG_DESC
|
TYPHOON_DESC_VALID
;
...
...
include/linux/irda.h
View file @
faedca65
...
...
@@ -25,6 +25,8 @@
#ifndef KERNEL_IRDA_H
#define KERNEL_IRDA_H
#include <linux/socket.h>
/* only for sa_family_t */
/* Hint bit positions for first hint byte */
#define HINT_PNP 0x01
#define HINT_PDA 0x02
...
...
include/linux/net.h
View file @
faedca65
...
...
@@ -19,7 +19,6 @@
#define _LINUX_NET_H
#include <linux/config.h>
#include <linux/socket.h>
#include <linux/wait.h>
struct
poll_table_struct
;
...
...
@@ -88,6 +87,8 @@ struct socket {
struct
vm_area_struct
;
struct
page
;
struct
kiocb
;
struct
sockaddr
;
struct
msghdr
;
struct
proto_ops
{
int
family
;
...
...
@@ -136,6 +137,8 @@ struct net_proto_family {
short
encrypt_net
;
};
struct
iovec
;
extern
int
sock_wake_async
(
struct
socket
*
sk
,
int
how
,
int
band
);
extern
int
sock_register
(
struct
net_proto_family
*
fam
);
extern
int
sock_unregister
(
int
family
);
...
...
include/linux/netlink.h
View file @
faedca65
#ifndef __LINUX_NETLINK_H
#define __LINUX_NETLINK_H
#include <linux/socket.h>
/* for sa_family_t */
#define NETLINK_ROUTE 0
/* Routing/device hook */
#define NETLINK_SKIP 1
/* Reserved for ENskip */
#define NETLINK_USERSOCK 2
/* Reserved for user mode socket protocols */
...
...
include/net/tcp.h
View file @
faedca65
...
...
@@ -31,6 +31,7 @@
#include <linux/percpu.h>
#include <net/checksum.h>
#include <net/sock.h>
#include <net/snmp.h>
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
#include <linux/ipv6.h>
#endif
...
...
@@ -639,6 +640,8 @@ DECLARE_SNMP_STAT(struct tcp_mib, tcp_statistics);
#define TCP_INC_STATS_BH(field) SNMP_INC_STATS_BH(tcp_statistics, field)
#define TCP_INC_STATS_USER(field) SNMP_INC_STATS_USER(tcp_statistics, field)
#define TCP_DEC_STATS(field) SNMP_DEC_STATS(tcp_statistics, field)
#define TCP_ADD_STATS_BH(field, val) SNMP_ADD_STATS_BH(tcp_statistics, field, val)
#define TCP_ADD_STATS_USER(field, val) SNMP_ADD_STATS_USER(tcp_statistics, field, val)
extern
__inline__
void
tcp_put_port
(
struct
sock
*
sk
);
extern
void
tcp_inherit_port
(
struct
sock
*
sk
,
struct
sock
*
child
);
...
...
@@ -1398,6 +1401,9 @@ static __inline__ void tcp_set_state(struct sock *sk, int state)
break
;
case
TCP_CLOSE
:
if
(
oldstate
==
TCP_CLOSE_WAIT
||
oldstate
==
TCP_ESTABLISHED
)
TCP_INC_STATS
(
TcpEstabResets
);
sk
->
prot
->
unhash
(
sk
);
if
(
sk
->
prev
&&
!
(
sk
->
userlocks
&
SOCK_BINDPORT_LOCK
))
tcp_put_port
(
sk
);
...
...
@@ -1878,4 +1884,13 @@ static inline int tcp_use_frto(const struct sock *sk)
tp
->
snd_una
+
tp
->
snd_wnd
));
}
static
inline
void
tcp_mib_init
(
void
)
{
/* See RFC 2012 */
TCP_ADD_STATS_USER
(
TcpRtoAlgorithm
,
1
);
TCP_ADD_STATS_USER
(
TcpRtoMin
,
TCP_RTO_MIN
*
1000
/
HZ
);
TCP_ADD_STATS_USER
(
TcpRtoMax
,
TCP_RTO_MAX
*
1000
/
HZ
);
TCP_ADD_STATS_USER
(
TcpMaxConn
,
-
1
);
}
#endif
/* _TCP_H */
include/net/xfrm.h
View file @
faedca65
...
...
@@ -84,6 +84,7 @@ extern struct semaphore xfrm_cfg_sem;
/* Full description of state of transformer. */
struct
xfrm_state
{
/* Note: bydst is re-used during gc */
struct
list_head
bydst
;
struct
list_head
byspi
;
...
...
net/8021q/vlan.c
View file @
faedca65
...
...
@@ -29,7 +29,6 @@
#include <net/p8022.h>
#include <net/arp.h>
#include <linux/rtnetlink.h>
#include <linux/brlock.h>
#include <linux/notifier.h>
#include <linux/if_vlan.h>
...
...
@@ -68,7 +67,6 @@ static struct packet_type vlan_packet_type = {
.
dev
=
NULL
,
.
func
=
vlan_skb_recv
,
/* VLAN receive method */
.
data
=
(
void
*
)(
-
1
),
/* Set here '(void *)1' when this code can SHARE SKBs */
.
next
=
NULL
};
/* End of global variables definitions. */
...
...
@@ -231,9 +229,8 @@ static int unregister_vlan_dev(struct net_device *real_dev,
real_dev
->
vlan_rx_kill_vid
(
real_dev
,
vlan_id
);
}
br_write_lock
(
BR_NETPROTO_LOCK
);
grp
->
vlan_devices
[
vlan_id
]
=
NULL
;
br_write_unlock
(
BR_NETPROTO_LOCK
);
synchronize_net
(
);
/* Caller unregisters (and if necessary, puts)
...
...
@@ -266,7 +263,7 @@ static int unregister_vlan_dev(struct net_device *real_dev,
ret
=
1
;
}
MOD_DEC_USE_COUNT
;
module_put
(
THIS_MODULE
)
;
}
}
...
...
@@ -433,6 +430,7 @@ static struct net_device *register_vlan_device(const char *eth_IF_name,
/* set up method calls */
new_dev
->
init
=
vlan_dev_init
;
new_dev
->
destructor
=
vlan_dev_destruct
;
new_dev
->
owner
=
THIS_MODULE
;
/* new_dev->ifindex = 0; it will be set when added to
* the global list.
...
...
@@ -544,12 +542,18 @@ static struct net_device *register_vlan_device(const char *eth_IF_name,
/* NOTE: We have a reference to the real device,
* so hold on to the reference.
*/
MOD_INC_USE_COUNT
;
/* Add was a success!! */
if
(
!
try_module_get
(
THIS_MODULE
))
goto
out_module_dying
;
#ifdef VLAN_DEBUG
printk
(
VLAN_DBG
"Allocated new device successfully, returning.
\n
"
);
#endif
return
new_dev
;
out_module_dying:
rtnl_lock
();
unregister_netdevice
(
new_dev
);
out_free_newdev_priv:
kfree
(
new_dev
->
priv
);
...
...
net/8021q/vlan_dev.c
View file @
faedca65
...
...
@@ -31,7 +31,6 @@
#include <net/datalink.h>
#include <net/p8022.h>
#include <net/arp.h>
#include <linux/brlock.h>
#include "vlan.h"
#include "vlanproc.h"
...
...
net/core/datagram.c
View file @
faedca65
...
...
@@ -220,7 +220,7 @@ int skb_copy_datagram(const struct sk_buff *skb, int offset, char *to, int size)
int
skb_copy_datagram_iovec
(
const
struct
sk_buff
*
skb
,
int
offset
,
struct
iovec
*
to
,
int
len
)
{
int
start
=
skb
->
len
-
skb
->
data_len
;
int
start
=
skb
_headlen
(
skb
)
;
int
i
,
copy
=
start
-
offset
;
/* Copy header. */
...
...
@@ -295,7 +295,7 @@ int skb_copy_datagram_iovec(const struct sk_buff *skb, int offset,
int
skb_copy_and_csum_datagram
(
const
struct
sk_buff
*
skb
,
int
offset
,
u8
*
to
,
int
len
,
unsigned
int
*
csump
)
{
int
start
=
skb
->
len
-
skb
->
data_len
;
int
start
=
skb
_headlen
(
skb
)
;
int
pos
=
0
;
int
i
,
copy
=
start
-
offset
;
...
...
net/core/skbuff.c
View file @
faedca65
...
...
@@ -932,7 +932,7 @@ unsigned char *__pskb_pull_tail(struct sk_buff *skb, int delta)
int
skb_copy_bits
(
const
struct
sk_buff
*
skb
,
int
offset
,
void
*
to
,
int
len
)
{
int
i
,
copy
;
int
start
=
skb
->
len
-
skb
->
data_len
;
int
start
=
skb
_headlen
(
skb
)
;
if
(
offset
>
(
int
)
skb
->
len
-
len
)
goto
fault
;
...
...
@@ -1009,7 +1009,7 @@ int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len)
unsigned
int
skb_checksum
(
const
struct
sk_buff
*
skb
,
int
offset
,
int
len
,
unsigned
int
csum
)
{
int
start
=
skb
->
len
-
skb
->
data_len
;
int
start
=
skb
_headlen
(
skb
)
;
int
i
,
copy
=
start
-
offset
;
int
pos
=
0
;
...
...
@@ -1085,7 +1085,7 @@ unsigned int skb_checksum(const struct sk_buff *skb, int offset,
unsigned
int
skb_copy_and_csum_bits
(
const
struct
sk_buff
*
skb
,
int
offset
,
u8
*
to
,
int
len
,
unsigned
int
csum
)
{
int
start
=
skb
->
len
-
skb
->
data_len
;
int
start
=
skb
_headlen
(
skb
)
;
int
i
,
copy
=
start
-
offset
;
int
pos
=
0
;
...
...
@@ -1170,9 +1170,9 @@ void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to)
if
(
skb
->
ip_summed
==
CHECKSUM_HW
)
csstart
=
skb
->
h
.
raw
-
skb
->
data
;
else
csstart
=
skb
->
len
-
skb
->
data_len
;
csstart
=
skb
_headlen
(
skb
)
;
if
(
csstart
>
skb
->
len
-
skb
->
data_len
)
if
(
csstart
>
skb
_headlen
(
skb
)
)
BUG
();
memcpy
(
to
,
skb
->
data
,
csstart
);
...
...
net/ipv4/af_inet.c
View file @
faedca65
...
...
@@ -1108,6 +1108,8 @@ static int __init init_ipv4_mibs(void)
}
}
(
void
)
tcp_mib_init
();
return
0
;
}
...
...
net/ipv4/ah.c
View file @
faedca65
...
...
@@ -314,12 +314,14 @@ static void ah_destroy(struct xfrm_state *x)
crypto_free_tfm
(
ahp
->
tfm
);
ahp
->
tfm
=
NULL
;
}
kfree
(
ahp
);
}
static
struct
xfrm_type
ah_type
=
{
.
description
=
"AH4"
,
.
owner
=
THIS_MODULE
,
.
proto
=
IPPROTO_AH
,
.
init_state
=
ah_init_state
,
.
destructor
=
ah_destroy
,
...
...
@@ -335,7 +337,6 @@ static struct inet_protocol ah4_protocol = {
static
int
__init
ah4_init
(
void
)
{
SET_MODULE_OWNER
(
&
ah_type
);
if
(
xfrm_register_type
(
&
ah_type
,
AF_INET
)
<
0
)
{
printk
(
KERN_INFO
"ip ah init: can't add xfrm type
\n
"
);
return
-
EAGAIN
;
...
...
net/ipv4/esp.c
View file @
faedca65
...
...
@@ -452,6 +452,7 @@ void esp_destroy(struct xfrm_state *x)
kfree
(
esp
->
auth
.
work_icv
);
esp
->
auth
.
work_icv
=
NULL
;
}
kfree
(
esp
);
}
int
esp_init_state
(
struct
xfrm_state
*
x
,
void
*
args
)
...
...
@@ -552,6 +553,7 @@ int esp_init_state(struct xfrm_state *x, void *args)
static
struct
xfrm_type
esp_type
=
{
.
description
=
"ESP4"
,
.
owner
=
THIS_MODULE
,
.
proto
=
IPPROTO_ESP
,
.
init_state
=
esp_init_state
,
.
destructor
=
esp_destroy
,
...
...
net/ipv4/proc.c
View file @
faedca65
...
...
@@ -143,9 +143,15 @@ static int snmp_seq_show(struct seq_file *seq, void *v)
"InSegs OutSegs RetransSegs InErrs OutRsts
\n
Tcp:"
);
for
(
i
=
0
;
i
<
offsetof
(
struct
tcp_mib
,
__pad
)
/
sizeof
(
unsigned
long
);
i
++
)
i
<
offsetof
(
struct
tcp_mib
,
__pad
)
/
sizeof
(
unsigned
long
);
i
++
)
{
if
(
i
==
(
offsetof
(
struct
tcp_mib
,
TcpMaxConn
)
/
sizeof
(
unsigned
long
)))
/* MaxConn field is negative, RFC 2012 */
seq_printf
(
seq
,
" %ld"
,
fold_field
((
void
**
)
tcp_statistics
,
i
));
else
seq_printf
(
seq
,
" %lu"
,
fold_field
((
void
**
)
tcp_statistics
,
i
));
}
seq_printf
(
seq
,
"
\n
Udp: InDatagrams NoPorts InErrors OutDatagrams
\n
"
"Udp:"
);
...
...
net/ipv4/tcp_output.c
View file @
faedca65
...
...
@@ -354,7 +354,7 @@ void tcp_push_one(struct sock *sk, unsigned cur_mss)
static
void
skb_split
(
struct
sk_buff
*
skb
,
struct
sk_buff
*
skb1
,
u32
len
)
{
int
i
;
int
pos
=
skb
->
len
-
skb
->
data_len
;
int
pos
=
skb
_headlen
(
skb
)
;
if
(
len
<
pos
)
{
/* Split line is inside header. */
...
...
net/ipv6/ah6.c
View file @
faedca65
...
...
@@ -313,11 +313,13 @@ static void ah6_destroy(struct xfrm_state *x)
crypto_free_tfm
(
ahp
->
tfm
);
ahp
->
tfm
=
NULL
;
}
kfree
(
ahp
);
}
static
struct
xfrm_type
ah6_type
=
{
.
description
=
"AH6"
,
.
owner
=
THIS_MODULE
,
.
proto
=
IPPROTO_AH
,
.
init_state
=
ah6_init_state
,
.
destructor
=
ah6_destroy
,
...
...
@@ -333,8 +335,6 @@ static struct inet6_protocol ah6_protocol = {
int
__init
ah6_init
(
void
)
{
SET_MODULE_OWNER
(
&
ah6_type
);
if
(
xfrm_register_type
(
&
ah6_type
,
AF_INET6
)
<
0
)
{
printk
(
KERN_INFO
"ipv6 ah init: can't add xfrm type
\n
"
);
return
-
EAGAIN
;
...
...
net/ipv6/esp6.c
View file @
faedca65
...
...
@@ -406,6 +406,7 @@ void esp6_destroy(struct xfrm_state *x)
kfree
(
esp
->
auth
.
work_icv
);
esp
->
auth
.
work_icv
=
NULL
;
}
kfree
(
esp
);
}
int
esp6_init_state
(
struct
xfrm_state
*
x
,
void
*
args
)
...
...
@@ -488,6 +489,7 @@ int esp6_init_state(struct xfrm_state *x, void *args)
static
struct
xfrm_type
esp6_type
=
{
.
description
=
"ESP6"
,
.
owner
=
THIS_MODULE
,
.
proto
=
IPPROTO_ESP
,
.
init_state
=
esp6_init_state
,
.
destructor
=
esp6_destroy
,
...
...
@@ -504,7 +506,6 @@ static struct inet6_protocol esp6_protocol = {
int
__init
esp6_init
(
void
)
{
SET_MODULE_OWNER
(
&
esp6_type
);
if
(
xfrm_register_type
(
&
esp6_type
,
AF_INET6
)
<
0
)
{
printk
(
KERN_INFO
"ipv6 esp init: can't add xfrm type
\n
"
);
return
-
EAGAIN
;
...
...
net/xfrm/xfrm_algo.c
View file @
faedca65
...
...
@@ -445,7 +445,7 @@ int xfrm_count_enc_supported(void)
void
skb_icv_walk
(
const
struct
sk_buff
*
skb
,
struct
crypto_tfm
*
tfm
,
int
offset
,
int
len
,
icv_update_fn_t
icv_update
)
{
int
start
=
skb
->
len
-
skb
->
data_len
;
int
start
=
skb
_headlen
(
skb
)
;
int
i
,
copy
=
start
-
offset
;
struct
scatterlist
sg
;
...
...
@@ -521,7 +521,7 @@ void skb_icv_walk(const struct sk_buff *skb, struct crypto_tfm *tfm,
int
skb_to_sgvec
(
struct
sk_buff
*
skb
,
struct
scatterlist
*
sg
,
int
offset
,
int
len
)
{
int
start
=
skb
->
len
-
skb
->
data_len
;
int
start
=
skb
_headlen
(
skb
)
;
int
i
,
copy
=
start
-
offset
;
int
elt
=
0
;
...
...
net/xfrm/xfrm_policy.c
View file @
faedca65
...
...
@@ -963,6 +963,8 @@ int __xfrm_policy_check(struct sock *sk, int dir, struct sk_buff *skb,
* are implied between each two transformations.
*/
for
(
i
=
pol
->
xfrm_nr
-
1
,
k
=
0
;
i
>=
0
;
i
--
)
{
if
(
pol
->
xfrm_vec
[
i
].
optional
)
continue
;
k
=
xfrm_policy_ok
(
pol
->
xfrm_vec
+
i
,
sp
,
k
,
family
);
if
(
k
<
0
)
goto
reject
;
...
...
net/xfrm/xfrm_state.c
View file @
faedca65
...
...
@@ -13,6 +13,7 @@
*
*/
#include <linux/workqueue.h>
#include <net/xfrm.h>
#include <linux/pfkeyv2.h>
#include <linux/ipsec.h>
...
...
@@ -41,8 +42,48 @@ DECLARE_WAIT_QUEUE_HEAD(km_waitq);
static
rwlock_t
xfrm_state_afinfo_lock
=
RW_LOCK_UNLOCKED
;
static
struct
xfrm_state_afinfo
*
xfrm_state_afinfo
[
NPROTO
];
static
struct
work_struct
xfrm_state_gc_work
;
static
struct
list_head
xfrm_state_gc_list
=
LIST_HEAD_INIT
(
xfrm_state_gc_list
);
static
spinlock_t
xfrm_state_gc_lock
=
SPIN_LOCK_UNLOCKED
;
static
void
__xfrm_state_delete
(
struct
xfrm_state
*
x
);
static
void
xfrm_state_gc_destroy
(
struct
xfrm_state
*
x
)
{
if
(
del_timer
(
&
x
->
timer
))
BUG
();
if
(
x
->
aalg
)
kfree
(
x
->
aalg
);
if
(
x
->
ealg
)
kfree
(
x
->
ealg
);
if
(
x
->
calg
)
kfree
(
x
->
calg
);
if
(
x
->
encap
)
kfree
(
x
->
encap
);
if
(
x
->
type
)
{
x
->
type
->
destructor
(
x
);
xfrm_put_type
(
x
->
type
);
}
kfree
(
x
);
wake_up
(
&
km_waitq
);
}
static
void
xfrm_state_gc_task
(
void
*
data
)
{
struct
xfrm_state
*
x
;
struct
list_head
*
entry
,
*
tmp
;
struct
list_head
gc_list
=
LIST_HEAD_INIT
(
gc_list
);
spin_lock_bh
(
&
xfrm_state_gc_lock
);
list_splice_init
(
&
xfrm_state_gc_list
,
&
gc_list
);
spin_unlock_bh
(
&
xfrm_state_gc_lock
);
list_for_each_safe
(
entry
,
tmp
,
&
gc_list
)
{
x
=
list_entry
(
entry
,
struct
xfrm_state
,
bydst
);
xfrm_state_gc_destroy
(
x
);
}
}
static
inline
unsigned
long
make_jiffies
(
long
secs
)
{
if
(
secs
>=
(
MAX_SCHEDULE_TIMEOUT
-
1
)
/
HZ
)
...
...
@@ -149,28 +190,17 @@ struct xfrm_state *xfrm_state_alloc(void)
void
__xfrm_state_destroy
(
struct
xfrm_state
*
x
)
{
BUG_TRAP
(
x
->
km
.
state
==
XFRM_STATE_DEAD
);
if
(
del_timer
(
&
x
->
timer
))
BUG
();
if
(
x
->
aalg
)
kfree
(
x
->
aalg
);
if
(
x
->
ealg
)
kfree
(
x
->
ealg
);
if
(
x
->
calg
)
kfree
(
x
->
calg
);
if
(
x
->
encap
)
kfree
(
x
->
encap
);
if
(
x
->
type
)
xfrm_put_type
(
x
->
type
);
kfree
(
x
);
spin_lock_bh
(
&
xfrm_state_gc_lock
);
list_add
(
&
x
->
bydst
,
&
xfrm_state_gc_list
);
spin_unlock_bh
(
&
xfrm_state_gc_lock
);
schedule_work
(
&
xfrm_state_gc_work
);
}
static
void
__xfrm_state_delete
(
struct
xfrm_state
*
x
)
{
int
kill
=
0
;
if
(
x
->
km
.
state
!=
XFRM_STATE_DEAD
)
{
x
->
km
.
state
=
XFRM_STATE_DEAD
;
kill
=
1
;
spin_lock
(
&
xfrm_state_lock
);
list_del
(
&
x
->
bydst
);
atomic_dec
(
&
x
->
refcnt
);
...
...
@@ -189,22 +219,17 @@ static void __xfrm_state_delete(struct xfrm_state *x)
*/
if
(
atomic_read
(
&
x
->
refcnt
)
>
2
)
xfrm_flush_bundles
(
x
);
}
/* All xfrm_state objects are created by one of two possible
* paths:
*
* 1) xfrm_state_alloc --> xfrm_state_insert
* 2) xfrm_state_lookup --> xfrm_state_insert
*
* The xfrm_state_lookup or xfrm_state_alloc call gives a
* reference, and that is what we are dropping here.
*/
atomic_dec
(
&
x
->
refcnt
);
if
(
kill
&&
x
->
type
)
x
->
type
->
destructor
(
x
);
wake_up
(
&
km_waitq
);
}
}
void
xfrm_state_delete
(
struct
xfrm_state
*
x
)
...
...
@@ -773,5 +798,6 @@ void __init xfrm_state_init(void)
INIT_LIST_HEAD
(
&
xfrm_state_bydst
[
i
]);
INIT_LIST_HEAD
(
&
xfrm_state_byspi
[
i
]);
}
INIT_WORK
(
&
xfrm_state_gc_work
,
xfrm_state_gc_task
,
NULL
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment