Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
f7402dc4
Commit
f7402dc4
authored
Sep 07, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
parents
e72225d1
832079d2
Changes
35
Hide whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
356 additions
and
105 deletions
+356
-105
crypto/cipher.c
crypto/cipher.c
+9
-3
drivers/net/arcnet/arcnet.c
drivers/net/arcnet/arcnet.c
+17
-8
include/linux/netfilter_ipv4/ip_conntrack.h
include/linux/netfilter_ipv4/ip_conntrack.h
+5
-0
include/linux/netfilter_ipv4/ip_conntrack_core.h
include/linux/netfilter_ipv4/ip_conntrack_core.h
+1
-1
include/linux/netfilter_ipv4/ip_nat_rule.h
include/linux/netfilter_ipv4/ip_nat_rule.h
+5
-0
include/linux/skbuff.h
include/linux/skbuff.h
+2
-2
include/net/ax25.h
include/net/ax25.h
+1
-1
net/ax25/af_ax25.c
net/ax25/af_ax25.c
+4
-3
net/ax25/ax25_addr.c
net/ax25/ax25_addr.c
+1
-2
net/ax25/ax25_route.c
net/ax25/ax25_route.c
+5
-2
net/ax25/ax25_uid.c
net/ax25/ax25_uid.c
+3
-1
net/core/sock.c
net/core/sock.c
+4
-5
net/ipv4/ip_fragment.c
net/ipv4/ip_fragment.c
+1
-1
net/ipv4/netfilter/Kconfig
net/ipv4/netfilter/Kconfig
+20
-0
net/ipv4/netfilter/Makefile
net/ipv4/netfilter/Makefile
+1
-0
net/ipv4/netfilter/ip_conntrack_amanda.c
net/ipv4/netfilter/ip_conntrack_amanda.c
+1
-0
net/ipv4/netfilter/ip_conntrack_core.c
net/ipv4/netfilter/ip_conntrack_core.c
+18
-20
net/ipv4/netfilter/ip_conntrack_ftp.c
net/ipv4/netfilter/ip_conntrack_ftp.c
+1
-0
net/ipv4/netfilter/ip_conntrack_irc.c
net/ipv4/netfilter/ip_conntrack_irc.c
+1
-0
net/ipv4/netfilter/ip_conntrack_netbios_ns.c
net/ipv4/netfilter/ip_conntrack_netbios_ns.c
+131
-0
net/ipv4/netfilter/ip_conntrack_netlink.c
net/ipv4/netfilter/ip_conntrack_netlink.c
+9
-4
net/ipv4/netfilter/ip_conntrack_proto_tcp.c
net/ipv4/netfilter/ip_conntrack_proto_tcp.c
+1
-0
net/ipv4/netfilter/ip_conntrack_standalone.c
net/ipv4/netfilter/ip_conntrack_standalone.c
+1
-1
net/ipv4/netfilter/ip_conntrack_tftp.c
net/ipv4/netfilter/ip_conntrack_tftp.c
+1
-0
net/ipv4/netfilter/ip_nat_rule.c
net/ipv4/netfilter/ip_nat_rule.c
+21
-0
net/ipv4/netfilter/ip_nat_standalone.c
net/ipv4/netfilter/ip_nat_standalone.c
+6
-2
net/netfilter/nfnetlink_queue.c
net/netfilter/nfnetlink_queue.c
+7
-1
net/netlink/af_netlink.c
net/netlink/af_netlink.c
+41
-18
net/netrom/af_netrom.c
net/netrom/af_netrom.c
+4
-3
net/netrom/nr_route.c
net/netrom/nr_route.c
+5
-3
net/packet/af_packet.c
net/packet/af_packet.c
+2
-4
net/rose/af_rose.c
net/rose/af_rose.c
+4
-2
net/rose/rose_route.c
net/rose/rose_route.c
+9
-5
net/rose/rose_subr.c
net/rose/rose_subr.c
+3
-2
net/socket.c
net/socket.c
+11
-11
No files found.
crypto/cipher.c
View file @
f7402dc4
...
@@ -191,6 +191,8 @@ static unsigned int cbc_process_encrypt(const struct cipher_desc *desc,
...
@@ -191,6 +191,8 @@ static unsigned int cbc_process_encrypt(const struct cipher_desc *desc,
u8
*
iv
=
desc
->
info
;
u8
*
iv
=
desc
->
info
;
unsigned
int
done
=
0
;
unsigned
int
done
=
0
;
nbytes
-=
bsize
;
do
{
do
{
xor
(
iv
,
src
);
xor
(
iv
,
src
);
fn
(
crypto_tfm_ctx
(
tfm
),
dst
,
iv
);
fn
(
crypto_tfm_ctx
(
tfm
),
dst
,
iv
);
...
@@ -198,7 +200,7 @@ static unsigned int cbc_process_encrypt(const struct cipher_desc *desc,
...
@@ -198,7 +200,7 @@ static unsigned int cbc_process_encrypt(const struct cipher_desc *desc,
src
+=
bsize
;
src
+=
bsize
;
dst
+=
bsize
;
dst
+=
bsize
;
}
while
((
done
+=
bsize
)
<
nbytes
);
}
while
((
done
+=
bsize
)
<
=
nbytes
);
return
done
;
return
done
;
}
}
...
@@ -219,6 +221,8 @@ static unsigned int cbc_process_decrypt(const struct cipher_desc *desc,
...
@@ -219,6 +221,8 @@ static unsigned int cbc_process_decrypt(const struct cipher_desc *desc,
u8
*
iv
=
desc
->
info
;
u8
*
iv
=
desc
->
info
;
unsigned
int
done
=
0
;
unsigned
int
done
=
0
;
nbytes
-=
bsize
;
do
{
do
{
u8
*
tmp_dst
=
*
dst_p
;
u8
*
tmp_dst
=
*
dst_p
;
...
@@ -230,7 +234,7 @@ static unsigned int cbc_process_decrypt(const struct cipher_desc *desc,
...
@@ -230,7 +234,7 @@ static unsigned int cbc_process_decrypt(const struct cipher_desc *desc,
src
+=
bsize
;
src
+=
bsize
;
dst
+=
bsize
;
dst
+=
bsize
;
}
while
((
done
+=
bsize
)
<
nbytes
);
}
while
((
done
+=
bsize
)
<
=
nbytes
);
return
done
;
return
done
;
}
}
...
@@ -243,12 +247,14 @@ static unsigned int ecb_process(const struct cipher_desc *desc, u8 *dst,
...
@@ -243,12 +247,14 @@ static unsigned int ecb_process(const struct cipher_desc *desc, u8 *dst,
void
(
*
fn
)(
void
*
,
u8
*
,
const
u8
*
)
=
desc
->
crfn
;
void
(
*
fn
)(
void
*
,
u8
*
,
const
u8
*
)
=
desc
->
crfn
;
unsigned
int
done
=
0
;
unsigned
int
done
=
0
;
nbytes
-=
bsize
;
do
{
do
{
fn
(
crypto_tfm_ctx
(
tfm
),
dst
,
src
);
fn
(
crypto_tfm_ctx
(
tfm
),
dst
,
src
);
src
+=
bsize
;
src
+=
bsize
;
dst
+=
bsize
;
dst
+=
bsize
;
}
while
((
done
+=
bsize
)
<
nbytes
);
}
while
((
done
+=
bsize
)
<
=
nbytes
);
return
done
;
return
done
;
}
}
...
...
drivers/net/arcnet/arcnet.c
View file @
f7402dc4
...
@@ -597,7 +597,7 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
...
@@ -597,7 +597,7 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
struct
ArcProto
*
proto
;
struct
ArcProto
*
proto
;
int
txbuf
;
int
txbuf
;
unsigned
long
flags
;
unsigned
long
flags
;
int
freeskb
=
0
;
int
freeskb
,
retval
;
BUGMSG
(
D_DURING
,
BUGMSG
(
D_DURING
,
"transmit requested (status=%Xh, txbufs=%d/%d, len=%d, protocol %x)
\n
"
,
"transmit requested (status=%Xh, txbufs=%d/%d, len=%d, protocol %x)
\n
"
,
...
@@ -615,7 +615,7 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
...
@@ -615,7 +615,7 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
if
(
skb
->
len
-
ARC_HDR_SIZE
>
XMTU
&&
!
proto
->
continue_tx
)
{
if
(
skb
->
len
-
ARC_HDR_SIZE
>
XMTU
&&
!
proto
->
continue_tx
)
{
BUGMSG
(
D_NORMAL
,
"fixme: packet too large: compensating badly!
\n
"
);
BUGMSG
(
D_NORMAL
,
"fixme: packet too large: compensating badly!
\n
"
);
dev_kfree_skb
(
skb
);
dev_kfree_skb
(
skb
);
return
0
;
/* don't try again */
return
NETDEV_TX_OK
;
/* don't try again */
}
}
/* We're busy transmitting a packet... */
/* We're busy transmitting a packet... */
...
@@ -623,8 +623,11 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
...
@@ -623,8 +623,11 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
spin_lock_irqsave
(
&
lp
->
lock
,
flags
);
spin_lock_irqsave
(
&
lp
->
lock
,
flags
);
AINTMASK
(
0
);
AINTMASK
(
0
);
if
(
lp
->
next_tx
==
-
1
)
txbuf
=
get_arcbuf
(
dev
);
txbuf
=
get_arcbuf
(
dev
);
else
{
txbuf
=
-
1
;
}
if
(
txbuf
!=
-
1
)
{
if
(
txbuf
!=
-
1
)
{
if
(
proto
->
prepare_tx
(
dev
,
pkt
,
skb
->
len
,
txbuf
)
&&
if
(
proto
->
prepare_tx
(
dev
,
pkt
,
skb
->
len
,
txbuf
)
&&
!
proto
->
ack_tx
)
{
!
proto
->
ack_tx
)
{
...
@@ -638,6 +641,8 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
...
@@ -638,6 +641,8 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
lp
->
outgoing
.
skb
=
skb
;
lp
->
outgoing
.
skb
=
skb
;
lp
->
outgoing
.
pkt
=
pkt
;
lp
->
outgoing
.
pkt
=
pkt
;
freeskb
=
0
;
if
(
proto
->
continue_tx
&&
if
(
proto
->
continue_tx
&&
proto
->
continue_tx
(
dev
,
txbuf
))
{
proto
->
continue_tx
(
dev
,
txbuf
))
{
BUGMSG
(
D_NORMAL
,
BUGMSG
(
D_NORMAL
,
...
@@ -645,10 +650,12 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
...
@@ -645,10 +650,12 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
"(proto='%c')
\n
"
,
proto
->
suffix
);
"(proto='%c')
\n
"
,
proto
->
suffix
);
}
}
}
}
retval
=
NETDEV_TX_OK
;
dev
->
trans_start
=
jiffies
;
lp
->
next_tx
=
txbuf
;
lp
->
next_tx
=
txbuf
;
}
else
{
}
else
{
freeskb
=
1
;
retval
=
NETDEV_TX_BUSY
;
freeskb
=
0
;
}
}
BUGMSG
(
D_DEBUG
,
"%s: %d: %s, status: %x
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
ASTATUS
());
BUGMSG
(
D_DEBUG
,
"%s: %d: %s, status: %x
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
ASTATUS
());
...
@@ -664,7 +671,7 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
...
@@ -664,7 +671,7 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
if
(
freeskb
)
{
if
(
freeskb
)
{
dev_kfree_skb
(
skb
);
dev_kfree_skb
(
skb
);
}
}
return
0
;
/* no need to try again */
return
retval
;
/* no need to try again */
}
}
...
@@ -690,7 +697,6 @@ static int go_tx(struct net_device *dev)
...
@@ -690,7 +697,6 @@ static int go_tx(struct net_device *dev)
/* start sending */
/* start sending */
ACOMMAND
(
TXcmd
|
(
lp
->
cur_tx
<<
3
));
ACOMMAND
(
TXcmd
|
(
lp
->
cur_tx
<<
3
));
dev
->
trans_start
=
jiffies
;
lp
->
stats
.
tx_packets
++
;
lp
->
stats
.
tx_packets
++
;
lp
->
lasttrans_dest
=
lp
->
lastload_dest
;
lp
->
lasttrans_dest
=
lp
->
lastload_dest
;
lp
->
lastload_dest
=
0
;
lp
->
lastload_dest
=
0
;
...
@@ -917,6 +923,9 @@ irqreturn_t arcnet_interrupt(int irq, void *dev_id, struct pt_regs *regs)
...
@@ -917,6 +923,9 @@ irqreturn_t arcnet_interrupt(int irq, void *dev_id, struct pt_regs *regs)
BUGMSG
(
D_RECON
,
"Network reconfiguration detected (status=%Xh)
\n
"
,
BUGMSG
(
D_RECON
,
"Network reconfiguration detected (status=%Xh)
\n
"
,
status
);
status
);
/* MYRECON bit is at bit 7 of diagstatus */
if
(
diagstatus
&
0x80
)
BUGMSG
(
D_RECON
,
"Put out that recon myself
\n
"
);
/* is the RECON info empty or old? */
/* is the RECON info empty or old? */
if
(
!
lp
->
first_recon
||
!
lp
->
last_recon
||
if
(
!
lp
->
first_recon
||
!
lp
->
last_recon
||
...
...
include/linux/netfilter_ipv4/ip_conntrack.h
View file @
f7402dc4
...
@@ -263,6 +263,9 @@ struct ip_conntrack_expect
...
@@ -263,6 +263,9 @@ struct ip_conntrack_expect
/* Unique ID */
/* Unique ID */
unsigned
int
id
;
unsigned
int
id
;
/* Flags */
unsigned
int
flags
;
#ifdef CONFIG_IP_NF_NAT_NEEDED
#ifdef CONFIG_IP_NF_NAT_NEEDED
/* This is the original per-proto part, used to map the
/* This is the original per-proto part, used to map the
* expected connection the way the recipient expects. */
* expected connection the way the recipient expects. */
...
@@ -272,6 +275,8 @@ struct ip_conntrack_expect
...
@@ -272,6 +275,8 @@ struct ip_conntrack_expect
#endif
#endif
};
};
#define IP_CT_EXPECT_PERMANENT 0x1
static
inline
struct
ip_conntrack
*
static
inline
struct
ip_conntrack
*
tuplehash_to_ctrack
(
const
struct
ip_conntrack_tuple_hash
*
hash
)
tuplehash_to_ctrack
(
const
struct
ip_conntrack_tuple_hash
*
hash
)
{
{
...
...
include/linux/netfilter_ipv4/ip_conntrack_core.h
View file @
f7402dc4
...
@@ -52,7 +52,7 @@ static inline int ip_conntrack_confirm(struct sk_buff **pskb)
...
@@ -52,7 +52,7 @@ static inline int ip_conntrack_confirm(struct sk_buff **pskb)
return
ret
;
return
ret
;
}
}
extern
void
__ip_ct_expect_unlink_destroy
(
struct
ip_conntrack_expect
*
exp
);
extern
void
ip_ct_unlink_expect
(
struct
ip_conntrack_expect
*
exp
);
extern
struct
list_head
*
ip_conntrack_hash
;
extern
struct
list_head
*
ip_conntrack_hash
;
extern
struct
list_head
ip_conntrack_expect_list
;
extern
struct
list_head
ip_conntrack_expect_list
;
...
...
include/linux/netfilter_ipv4/ip_nat_rule.h
View file @
f7402dc4
...
@@ -19,5 +19,10 @@ extern unsigned int
...
@@ -19,5 +19,10 @@ extern unsigned int
alloc_null_binding
(
struct
ip_conntrack
*
conntrack
,
alloc_null_binding
(
struct
ip_conntrack
*
conntrack
,
struct
ip_nat_info
*
info
,
struct
ip_nat_info
*
info
,
unsigned
int
hooknum
);
unsigned
int
hooknum
);
extern
unsigned
int
alloc_null_binding_confirmed
(
struct
ip_conntrack
*
conntrack
,
struct
ip_nat_info
*
info
,
unsigned
int
hooknum
);
#endif
#endif
#endif
/* _IP_NAT_RULE_H */
#endif
/* _IP_NAT_RULE_H */
include/linux/skbuff.h
View file @
f7402dc4
...
@@ -1251,7 +1251,7 @@ extern void skb_add_mtu(int mtu);
...
@@ -1251,7 +1251,7 @@ extern void skb_add_mtu(int mtu);
* This function converts the offset back to a struct timeval and stores
* This function converts the offset back to a struct timeval and stores
* it in stamp.
* it in stamp.
*/
*/
static
inline
void
skb_get_timestamp
(
struct
sk_buff
*
skb
,
struct
timeval
*
stamp
)
static
inline
void
skb_get_timestamp
(
const
struct
sk_buff
*
skb
,
struct
timeval
*
stamp
)
{
{
stamp
->
tv_sec
=
skb
->
tstamp
.
off_sec
;
stamp
->
tv_sec
=
skb
->
tstamp
.
off_sec
;
stamp
->
tv_usec
=
skb
->
tstamp
.
off_usec
;
stamp
->
tv_usec
=
skb
->
tstamp
.
off_usec
;
...
@@ -1270,7 +1270,7 @@ static inline void skb_get_timestamp(struct sk_buff *skb, struct timeval *stamp)
...
@@ -1270,7 +1270,7 @@ static inline void skb_get_timestamp(struct sk_buff *skb, struct timeval *stamp)
* This function converts a struct timeval to an offset and stores
* This function converts a struct timeval to an offset and stores
* it in the skb.
* it in the skb.
*/
*/
static
inline
void
skb_set_timestamp
(
struct
sk_buff
*
skb
,
struct
timeval
*
stamp
)
static
inline
void
skb_set_timestamp
(
struct
sk_buff
*
skb
,
const
struct
timeval
*
stamp
)
{
{
skb
->
tstamp
.
off_sec
=
stamp
->
tv_sec
-
skb_tv_base
.
tv_sec
;
skb
->
tstamp
.
off_sec
=
stamp
->
tv_sec
-
skb_tv_base
.
tv_sec
;
skb
->
tstamp
.
off_usec
=
stamp
->
tv_usec
-
skb_tv_base
.
tv_usec
;
skb
->
tstamp
.
off_usec
=
stamp
->
tv_usec
-
skb_tv_base
.
tv_usec
;
...
...
include/net/ax25.h
View file @
f7402dc4
...
@@ -257,7 +257,7 @@ extern struct sock *ax25_make_new(struct sock *, struct ax25_dev *);
...
@@ -257,7 +257,7 @@ extern struct sock *ax25_make_new(struct sock *, struct ax25_dev *);
/* ax25_addr.c */
/* ax25_addr.c */
extern
ax25_address
null_ax25_address
;
extern
ax25_address
null_ax25_address
;
extern
char
*
ax2asc
(
ax25_address
*
);
extern
char
*
ax2asc
(
char
*
buf
,
ax25_address
*
);
extern
ax25_address
*
asc2ax
(
char
*
);
extern
ax25_address
*
asc2ax
(
char
*
);
extern
int
ax25cmp
(
ax25_address
*
,
ax25_address
*
);
extern
int
ax25cmp
(
ax25_address
*
,
ax25_address
*
);
extern
int
ax25digicmp
(
ax25_digi
*
,
ax25_digi
*
);
extern
int
ax25digicmp
(
ax25_digi
*
,
ax25_digi
*
);
...
...
net/ax25/af_ax25.c
View file @
f7402dc4
...
@@ -1874,6 +1874,7 @@ static void ax25_info_stop(struct seq_file *seq, void *v)
...
@@ -1874,6 +1874,7 @@ static void ax25_info_stop(struct seq_file *seq, void *v)
static
int
ax25_info_show
(
struct
seq_file
*
seq
,
void
*
v
)
static
int
ax25_info_show
(
struct
seq_file
*
seq
,
void
*
v
)
{
{
ax25_cb
*
ax25
=
v
;
ax25_cb
*
ax25
=
v
;
char
buf
[
11
];
int
k
;
int
k
;
...
@@ -1885,13 +1886,13 @@ static int ax25_info_show(struct seq_file *seq, void *v)
...
@@ -1885,13 +1886,13 @@ static int ax25_info_show(struct seq_file *seq, void *v)
seq_printf
(
seq
,
"%8.8lx %s %s%s "
,
seq_printf
(
seq
,
"%8.8lx %s %s%s "
,
(
long
)
ax25
,
(
long
)
ax25
,
ax25
->
ax25_dev
==
NULL
?
"???"
:
ax25
->
ax25_dev
->
dev
->
name
,
ax25
->
ax25_dev
==
NULL
?
"???"
:
ax25
->
ax25_dev
->
dev
->
name
,
ax2asc
(
&
ax25
->
source_addr
),
ax2asc
(
buf
,
&
ax25
->
source_addr
),
ax25
->
iamdigi
?
"*"
:
""
);
ax25
->
iamdigi
?
"*"
:
""
);
seq_printf
(
seq
,
"%s"
,
ax2asc
(
&
ax25
->
dest_addr
));
seq_printf
(
seq
,
"%s"
,
ax2asc
(
buf
,
&
ax25
->
dest_addr
));
for
(
k
=
0
;
(
ax25
->
digipeat
!=
NULL
)
&&
(
k
<
ax25
->
digipeat
->
ndigi
);
k
++
)
{
for
(
k
=
0
;
(
ax25
->
digipeat
!=
NULL
)
&&
(
k
<
ax25
->
digipeat
->
ndigi
);
k
++
)
{
seq_printf
(
seq
,
",%s%s"
,
seq_printf
(
seq
,
",%s%s"
,
ax2asc
(
&
ax25
->
digipeat
->
calls
[
k
]),
ax2asc
(
buf
,
&
ax25
->
digipeat
->
calls
[
k
]),
ax25
->
digipeat
->
repeated
[
k
]
?
"*"
:
""
);
ax25
->
digipeat
->
repeated
[
k
]
?
"*"
:
""
);
}
}
...
...
net/ax25/ax25_addr.c
View file @
f7402dc4
...
@@ -36,9 +36,8 @@ ax25_address null_ax25_address = {{0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00}};
...
@@ -36,9 +36,8 @@ ax25_address null_ax25_address = {{0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00}};
/*
/*
* ax25 -> ascii conversion
* ax25 -> ascii conversion
*/
*/
char
*
ax2asc
(
ax25_address
*
a
)
char
*
ax2asc
(
char
*
buf
,
ax25_address
*
a
)
{
{
static
char
buf
[
11
];
char
c
,
*
s
;
char
c
,
*
s
;
int
n
;
int
n
;
...
...
net/ax25/ax25_route.c
View file @
f7402dc4
...
@@ -298,6 +298,8 @@ static void ax25_rt_seq_stop(struct seq_file *seq, void *v)
...
@@ -298,6 +298,8 @@ static void ax25_rt_seq_stop(struct seq_file *seq, void *v)
static
int
ax25_rt_seq_show
(
struct
seq_file
*
seq
,
void
*
v
)
static
int
ax25_rt_seq_show
(
struct
seq_file
*
seq
,
void
*
v
)
{
{
char
buf
[
11
];
if
(
v
==
SEQ_START_TOKEN
)
if
(
v
==
SEQ_START_TOKEN
)
seq_puts
(
seq
,
"callsign dev mode digipeaters
\n
"
);
seq_puts
(
seq
,
"callsign dev mode digipeaters
\n
"
);
else
{
else
{
...
@@ -308,7 +310,7 @@ static int ax25_rt_seq_show(struct seq_file *seq, void *v)
...
@@ -308,7 +310,7 @@ static int ax25_rt_seq_show(struct seq_file *seq, void *v)
if
(
ax25cmp
(
&
ax25_rt
->
callsign
,
&
null_ax25_address
)
==
0
)
if
(
ax25cmp
(
&
ax25_rt
->
callsign
,
&
null_ax25_address
)
==
0
)
callsign
=
"default"
;
callsign
=
"default"
;
else
else
callsign
=
ax2asc
(
&
ax25_rt
->
callsign
);
callsign
=
ax2asc
(
buf
,
&
ax25_rt
->
callsign
);
seq_printf
(
seq
,
"%-9s %-4s"
,
seq_printf
(
seq
,
"%-9s %-4s"
,
callsign
,
callsign
,
...
@@ -328,7 +330,8 @@ static int ax25_rt_seq_show(struct seq_file *seq, void *v)
...
@@ -328,7 +330,8 @@ static int ax25_rt_seq_show(struct seq_file *seq, void *v)
if
(
ax25_rt
->
digipeat
!=
NULL
)
if
(
ax25_rt
->
digipeat
!=
NULL
)
for
(
i
=
0
;
i
<
ax25_rt
->
digipeat
->
ndigi
;
i
++
)
for
(
i
=
0
;
i
<
ax25_rt
->
digipeat
->
ndigi
;
i
++
)
seq_printf
(
seq
,
" %s"
,
ax2asc
(
&
ax25_rt
->
digipeat
->
calls
[
i
]));
seq_printf
(
seq
,
" %s"
,
ax2asc
(
buf
,
&
ax25_rt
->
digipeat
->
calls
[
i
]));
seq_puts
(
seq
,
"
\n
"
);
seq_puts
(
seq
,
"
\n
"
);
}
}
...
...
net/ax25/ax25_uid.c
View file @
f7402dc4
...
@@ -168,12 +168,14 @@ static void ax25_uid_seq_stop(struct seq_file *seq, void *v)
...
@@ -168,12 +168,14 @@ static void ax25_uid_seq_stop(struct seq_file *seq, void *v)
static
int
ax25_uid_seq_show
(
struct
seq_file
*
seq
,
void
*
v
)
static
int
ax25_uid_seq_show
(
struct
seq_file
*
seq
,
void
*
v
)
{
{
char
buf
[
11
];
if
(
v
==
SEQ_START_TOKEN
)
if
(
v
==
SEQ_START_TOKEN
)
seq_printf
(
seq
,
"Policy: %d
\n
"
,
ax25_uid_policy
);
seq_printf
(
seq
,
"Policy: %d
\n
"
,
ax25_uid_policy
);
else
{
else
{
struct
ax25_uid_assoc
*
pt
=
v
;
struct
ax25_uid_assoc
*
pt
=
v
;
seq_printf
(
seq
,
"%6d %s
\n
"
,
pt
->
uid
,
ax2asc
(
&
pt
->
call
));
seq_printf
(
seq
,
"%6d %s
\n
"
,
pt
->
uid
,
ax2asc
(
buf
,
&
pt
->
call
));
}
}
return
0
;
return
0
;
}
}
...
...
net/core/sock.c
View file @
f7402dc4
...
@@ -341,11 +341,11 @@ set_rcvbuf:
...
@@ -341,11 +341,11 @@ set_rcvbuf:
sock_reset_flag
(
sk
,
SOCK_LINGER
);
sock_reset_flag
(
sk
,
SOCK_LINGER
);
else
{
else
{
#if (BITS_PER_LONG == 32)
#if (BITS_PER_LONG == 32)
if
(
ling
.
l_linger
>=
MAX_SCHEDULE_TIMEOUT
/
HZ
)
if
(
(
unsigned
int
)
ling
.
l_linger
>=
MAX_SCHEDULE_TIMEOUT
/
HZ
)
sk
->
sk_lingertime
=
MAX_SCHEDULE_TIMEOUT
;
sk
->
sk_lingertime
=
MAX_SCHEDULE_TIMEOUT
;
else
else
#endif
#endif
sk
->
sk_lingertime
=
ling
.
l_linger
*
HZ
;
sk
->
sk_lingertime
=
(
unsigned
int
)
ling
.
l_linger
*
HZ
;
sock_set_flag
(
sk
,
SOCK_LINGER
);
sock_set_flag
(
sk
,
SOCK_LINGER
);
}
}
break
;
break
;
...
@@ -1529,6 +1529,8 @@ EXPORT_SYMBOL(proto_register);
...
@@ -1529,6 +1529,8 @@ EXPORT_SYMBOL(proto_register);
void
proto_unregister
(
struct
proto
*
prot
)
void
proto_unregister
(
struct
proto
*
prot
)
{
{
write_lock
(
&
proto_list_lock
);
write_lock
(
&
proto_list_lock
);
list_del
(
&
prot
->
node
);
write_unlock
(
&
proto_list_lock
);
if
(
prot
->
slab
!=
NULL
)
{
if
(
prot
->
slab
!=
NULL
)
{
kmem_cache_destroy
(
prot
->
slab
);
kmem_cache_destroy
(
prot
->
slab
);
...
@@ -1550,9 +1552,6 @@ void proto_unregister(struct proto *prot)
...
@@ -1550,9 +1552,6 @@ void proto_unregister(struct proto *prot)
kfree
(
name
);
kfree
(
name
);
prot
->
twsk_slab
=
NULL
;
prot
->
twsk_slab
=
NULL
;
}
}
list_del
(
&
prot
->
node
);
write_unlock
(
&
proto_list_lock
);
}
}
EXPORT_SYMBOL
(
proto_unregister
);
EXPORT_SYMBOL
(
proto_unregister
);
...
...
net/ipv4/ip_fragment.c
View file @
f7402dc4
...
@@ -457,7 +457,7 @@ static void ip_frag_queue(struct ipq *qp, struct sk_buff *skb)
...
@@ -457,7 +457,7 @@ static void ip_frag_queue(struct ipq *qp, struct sk_buff *skb)
if
(
pskb_pull
(
skb
,
ihl
)
==
NULL
)
if
(
pskb_pull
(
skb
,
ihl
)
==
NULL
)
goto
err
;
goto
err
;
if
(
pskb_trim
(
skb
,
end
-
offset
))
if
(
pskb_trim
_rcsum
(
skb
,
end
-
offset
))
goto
err
;
goto
err
;
/* Find out which fragments are in front and at the back of us
/* Find out which fragments are in front and at the back of us
...
...
net/ipv4/netfilter/Kconfig
View file @
f7402dc4
...
@@ -34,6 +34,7 @@ config IP_NF_CT_ACCT
...
@@ -34,6 +34,7 @@ config IP_NF_CT_ACCT
config IP_NF_CONNTRACK_MARK
config IP_NF_CONNTRACK_MARK
bool 'Connection mark tracking support'
bool 'Connection mark tracking support'
depends on IP_NF_CONNTRACK
help
help
This option enables support for connection marks, used by the
This option enables support for connection marks, used by the
`CONNMARK' target and `connmark' match. Similar to the mark value
`CONNMARK' target and `connmark' match. Similar to the mark value
...
@@ -85,6 +86,25 @@ config IP_NF_IRC
...
@@ -85,6 +86,25 @@ config IP_NF_IRC
To compile it as a module, choose M here. If unsure, say Y.
To compile it as a module, choose M here. If unsure, say Y.
config IP_NF_NETBIOS_NS
tristate "NetBIOS name service protocol support (EXPERIMENTAL)"
depends on IP_NF_CONNTRACK && EXPERIMENTAL
help
NetBIOS name service requests are sent as broadcast messages from an
unprivileged port and responded to with unicast messages to the
same port. This make them hard to firewall properly because connection
tracking doesn't deal with broadcasts. This helper tracks locally
originating NetBIOS name service requests and the corresponding
responses. It relies on correct IP address configuration, specifically
netmask and broadcast address. When properly configured, the output
of "ip address show" should look similar to this:
$ ip -4 address show eth0
4: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
inet 172.16.2.252/24 brd 172.16.2.255 scope global eth0
To compile it as a module, choose M here. If unsure, say N.
config IP_NF_TFTP
config IP_NF_TFTP
tristate "TFTP protocol support"
tristate "TFTP protocol support"
depends on IP_NF_CONNTRACK
depends on IP_NF_CONNTRACK
...
...
net/ipv4/netfilter/Makefile
View file @
f7402dc4
...
@@ -21,6 +21,7 @@ obj-$(CONFIG_IP_NF_AMANDA) += ip_conntrack_amanda.o
...
@@ -21,6 +21,7 @@ obj-$(CONFIG_IP_NF_AMANDA) += ip_conntrack_amanda.o
obj-$(CONFIG_IP_NF_TFTP)
+=
ip_conntrack_tftp.o
obj-$(CONFIG_IP_NF_TFTP)
+=
ip_conntrack_tftp.o
obj-$(CONFIG_IP_NF_FTP)
+=
ip_conntrack_ftp.o
obj-$(CONFIG_IP_NF_FTP)
+=
ip_conntrack_ftp.o
obj-$(CONFIG_IP_NF_IRC)
+=
ip_conntrack_irc.o
obj-$(CONFIG_IP_NF_IRC)
+=
ip_conntrack_irc.o
obj-$(CONFIG_IP_NF_NETBIOS_NS)
+=
ip_conntrack_netbios_ns.o
# NAT helpers
# NAT helpers
obj-$(CONFIG_IP_NF_NAT_AMANDA)
+=
ip_nat_amanda.o
obj-$(CONFIG_IP_NF_NAT_AMANDA)
+=
ip_nat_amanda.o
...
...
net/ipv4/netfilter/ip_conntrack_amanda.c
View file @
f7402dc4
...
@@ -108,6 +108,7 @@ static int help(struct sk_buff **pskb,
...
@@ -108,6 +108,7 @@ static int help(struct sk_buff **pskb,
}
}
exp
->
expectfn
=
NULL
;
exp
->
expectfn
=
NULL
;
exp
->
flags
=
0
;
exp
->
tuple
.
src
.
ip
=
ct
->
tuplehash
[
IP_CT_DIR_ORIGINAL
].
tuple
.
src
.
ip
;
exp
->
tuple
.
src
.
ip
=
ct
->
tuplehash
[
IP_CT_DIR_ORIGINAL
].
tuple
.
src
.
ip
;
exp
->
tuple
.
src
.
u
.
tcp
.
port
=
0
;
exp
->
tuple
.
src
.
u
.
tcp
.
port
=
0
;
...
...
net/ipv4/netfilter/ip_conntrack_core.c
View file @
f7402dc4
...
@@ -197,7 +197,7 @@ ip_ct_invert_tuple(struct ip_conntrack_tuple *inverse,
...
@@ -197,7 +197,7 @@ ip_ct_invert_tuple(struct ip_conntrack_tuple *inverse,
/* ip_conntrack_expect helper functions */
/* ip_conntrack_expect helper functions */
static
void
unlink_expect
(
struct
ip_conntrack_expect
*
exp
)
void
ip_ct_
unlink_expect
(
struct
ip_conntrack_expect
*
exp
)
{
{
ASSERT_WRITE_LOCK
(
&
ip_conntrack_lock
);
ASSERT_WRITE_LOCK
(
&
ip_conntrack_lock
);
IP_NF_ASSERT
(
!
timer_pending
(
&
exp
->
timeout
));
IP_NF_ASSERT
(
!
timer_pending
(
&
exp
->
timeout
));
...
@@ -207,18 +207,12 @@ static void unlink_expect(struct ip_conntrack_expect *exp)
...
@@ -207,18 +207,12 @@ static void unlink_expect(struct ip_conntrack_expect *exp)
ip_conntrack_expect_put
(
exp
);
ip_conntrack_expect_put
(
exp
);
}
}
void
__ip_ct_expect_unlink_destroy
(
struct
ip_conntrack_expect
*
exp
)
{
unlink_expect
(
exp
);
ip_conntrack_expect_put
(
exp
);
}
static
void
expectation_timed_out
(
unsigned
long
ul_expect
)
static
void
expectation_timed_out
(
unsigned
long
ul_expect
)
{
{
struct
ip_conntrack_expect
*
exp
=
(
void
*
)
ul_expect
;
struct
ip_conntrack_expect
*
exp
=
(
void
*
)
ul_expect
;
write_lock_bh
(
&
ip_conntrack_lock
);
write_lock_bh
(
&
ip_conntrack_lock
);
unlink_expect
(
exp
);
ip_ct_
unlink_expect
(
exp
);
write_unlock_bh
(
&
ip_conntrack_lock
);
write_unlock_bh
(
&
ip_conntrack_lock
);
ip_conntrack_expect_put
(
exp
);
ip_conntrack_expect_put
(
exp
);
}
}
...
@@ -264,10 +258,14 @@ find_expectation(const struct ip_conntrack_tuple *tuple)
...
@@ -264,10 +258,14 @@ find_expectation(const struct ip_conntrack_tuple *tuple)
master ct never got confirmed, we'd hold a reference to it
master ct never got confirmed, we'd hold a reference to it
and weird things would happen to future packets). */
and weird things would happen to future packets). */
if
(
ip_ct_tuple_mask_cmp
(
tuple
,
&
i
->
tuple
,
&
i
->
mask
)
if
(
ip_ct_tuple_mask_cmp
(
tuple
,
&
i
->
tuple
,
&
i
->
mask
)
&&
is_confirmed
(
i
->
master
)
&&
is_confirmed
(
i
->
master
))
{
&&
del_timer
(
&
i
->
timeout
))
{
if
(
i
->
flags
&
IP_CT_EXPECT_PERMANENT
)
{
unlink_expect
(
i
);
atomic_inc
(
&
i
->
use
);
return
i
;
return
i
;
}
else
if
(
del_timer
(
&
i
->
timeout
))
{
ip_ct_unlink_expect
(
i
);
return
i
;
}
}
}
}
}
return
NULL
;
return
NULL
;
...
@@ -284,7 +282,7 @@ void ip_ct_remove_expectations(struct ip_conntrack *ct)
...
@@ -284,7 +282,7 @@ void ip_ct_remove_expectations(struct ip_conntrack *ct)
list_for_each_entry_safe
(
i
,
tmp
,
&
ip_conntrack_expect_list
,
list
)
{
list_for_each_entry_safe
(
i
,
tmp
,
&
ip_conntrack_expect_list
,
list
)
{
if
(
i
->
master
==
ct
&&
del_timer
(
&
i
->
timeout
))
{
if
(
i
->
master
==
ct
&&
del_timer
(
&
i
->
timeout
))
{
unlink_expect
(
i
);
ip_ct_
unlink_expect
(
i
);
ip_conntrack_expect_put
(
i
);
ip_conntrack_expect_put
(
i
);
}
}
}
}
...
@@ -925,7 +923,7 @@ void ip_conntrack_unexpect_related(struct ip_conntrack_expect *exp)
...
@@ -925,7 +923,7 @@ void ip_conntrack_unexpect_related(struct ip_conntrack_expect *exp)
/* choose the the oldest expectation to evict */
/* choose the the oldest expectation to evict */
list_for_each_entry_reverse
(
i
,
&
ip_conntrack_expect_list
,
list
)
{
list_for_each_entry_reverse
(
i
,
&
ip_conntrack_expect_list
,
list
)
{
if
(
expect_matches
(
i
,
exp
)
&&
del_timer
(
&
i
->
timeout
))
{
if
(
expect_matches
(
i
,
exp
)
&&
del_timer
(
&
i
->
timeout
))
{
unlink_expect
(
i
);
ip_ct_
unlink_expect
(
i
);
write_unlock_bh
(
&
ip_conntrack_lock
);
write_unlock_bh
(
&
ip_conntrack_lock
);
ip_conntrack_expect_put
(
i
);
ip_conntrack_expect_put
(
i
);
return
;
return
;
...
@@ -934,6 +932,9 @@ void ip_conntrack_unexpect_related(struct ip_conntrack_expect *exp)
...
@@ -934,6 +932,9 @@ void ip_conntrack_unexpect_related(struct ip_conntrack_expect *exp)
write_unlock_bh
(
&
ip_conntrack_lock
);
write_unlock_bh
(
&
ip_conntrack_lock
);
}
}
/* We don't increase the master conntrack refcount for non-fulfilled
* conntracks. During the conntrack destruction, the expectations are
* always killed before the conntrack itself */
struct
ip_conntrack_expect
*
ip_conntrack_expect_alloc
(
struct
ip_conntrack
*
me
)
struct
ip_conntrack_expect
*
ip_conntrack_expect_alloc
(
struct
ip_conntrack
*
me
)
{
{
struct
ip_conntrack_expect
*
new
;
struct
ip_conntrack_expect
*
new
;
...
@@ -944,17 +945,14 @@ struct ip_conntrack_expect *ip_conntrack_expect_alloc(struct ip_conntrack *me)
...
@@ -944,17 +945,14 @@ struct ip_conntrack_expect *ip_conntrack_expect_alloc(struct ip_conntrack *me)
return
NULL
;
return
NULL
;
}
}
new
->
master
=
me
;
new
->
master
=
me
;
atomic_inc
(
&
new
->
master
->
ct_general
.
use
);
atomic_set
(
&
new
->
use
,
1
);
atomic_set
(
&
new
->
use
,
1
);
return
new
;
return
new
;
}
}
void
ip_conntrack_expect_put
(
struct
ip_conntrack_expect
*
exp
)
void
ip_conntrack_expect_put
(
struct
ip_conntrack_expect
*
exp
)
{
{
if
(
atomic_dec_and_test
(
&
exp
->
use
))
{
if
(
atomic_dec_and_test
(
&
exp
->
use
))
ip_conntrack_put
(
exp
->
master
);
kmem_cache_free
(
ip_conntrack_expect_cachep
,
exp
);
kmem_cache_free
(
ip_conntrack_expect_cachep
,
exp
);
}
}
}
static
void
ip_conntrack_expect_insert
(
struct
ip_conntrack_expect
*
exp
)
static
void
ip_conntrack_expect_insert
(
struct
ip_conntrack_expect
*
exp
)
...
@@ -982,7 +980,7 @@ static void evict_oldest_expect(struct ip_conntrack *master)
...
@@ -982,7 +980,7 @@ static void evict_oldest_expect(struct ip_conntrack *master)
list_for_each_entry_reverse
(
i
,
&
ip_conntrack_expect_list
,
list
)
{
list_for_each_entry_reverse
(
i
,
&
ip_conntrack_expect_list
,
list
)
{
if
(
i
->
master
==
master
)
{
if
(
i
->
master
==
master
)
{
if
(
del_timer
(
&
i
->
timeout
))
{
if
(
del_timer
(
&
i
->
timeout
))
{
unlink_expect
(
i
);
ip_ct_
unlink_expect
(
i
);
ip_conntrack_expect_put
(
i
);
ip_conntrack_expect_put
(
i
);
}
}
break
;
break
;
...
@@ -1099,7 +1097,7 @@ void ip_conntrack_helper_unregister(struct ip_conntrack_helper *me)
...
@@ -1099,7 +1097,7 @@ void ip_conntrack_helper_unregister(struct ip_conntrack_helper *me)
/* Get rid of expectations */
/* Get rid of expectations */
list_for_each_entry_safe
(
exp
,
tmp
,
&
ip_conntrack_expect_list
,
list
)
{
list_for_each_entry_safe
(
exp
,
tmp
,
&
ip_conntrack_expect_list
,
list
)
{
if
(
exp
->
master
->
helper
==
me
&&
del_timer
(
&
exp
->
timeout
))
{
if
(
exp
->
master
->
helper
==
me
&&
del_timer
(
&
exp
->
timeout
))
{
unlink_expect
(
exp
);
ip_ct_
unlink_expect
(
exp
);
ip_conntrack_expect_put
(
exp
);
ip_conntrack_expect_put
(
exp
);
}
}
}
}
...
...
net/ipv4/netfilter/ip_conntrack_ftp.c
View file @
f7402dc4
...
@@ -421,6 +421,7 @@ static int help(struct sk_buff **pskb,
...
@@ -421,6 +421,7 @@ static int help(struct sk_buff **pskb,
{
0xFFFFFFFF
,
{
.
tcp
=
{
0xFFFF
}
},
0xFF
}});
{
0xFFFFFFFF
,
{
.
tcp
=
{
0xFFFF
}
},
0xFF
}});
exp
->
expectfn
=
NULL
;
exp
->
expectfn
=
NULL
;
exp
->
flags
=
0
;
/* Now, NAT might want to mangle the packet, and register the
/* Now, NAT might want to mangle the packet, and register the
* (possibly changed) expectation itself. */
* (possibly changed) expectation itself. */
...
...
net/ipv4/netfilter/ip_conntrack_irc.c
View file @
f7402dc4
...
@@ -221,6 +221,7 @@ static int help(struct sk_buff **pskb,
...
@@ -221,6 +221,7 @@ static int help(struct sk_buff **pskb,
{
{
0
,
{
0
}
},
{
{
0
,
{
0
}
},
{
0xFFFFFFFF
,
{
.
tcp
=
{
0xFFFF
}
},
0xFF
}});
{
0xFFFFFFFF
,
{
.
tcp
=
{
0xFFFF
}
},
0xFF
}});
exp
->
expectfn
=
NULL
;
exp
->
expectfn
=
NULL
;
exp
->
flags
=
0
;
if
(
ip_nat_irc_hook
)
if
(
ip_nat_irc_hook
)
ret
=
ip_nat_irc_hook
(
pskb
,
ctinfo
,
ret
=
ip_nat_irc_hook
(
pskb
,
ctinfo
,
addr_beg_p
-
ib_ptr
,
addr_beg_p
-
ib_ptr
,
...
...
net/ipv4/netfilter/ip_conntrack_netbios_ns.c
0 → 100644
View file @
f7402dc4
/*
* NetBIOS name service broadcast connection tracking helper
*
* (c) 2005 Patrick McHardy <kaber@trash.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
/*
* This helper tracks locally originating NetBIOS name service
* requests by issuing permanent expectations (valid until
* timing out) matching all reply connections from the
* destination network. The only NetBIOS specific thing is
* actually the port number.
*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/skbuff.h>
#include <linux/netdevice.h>
#include <linux/inetdevice.h>
#include <linux/in.h>
#include <linux/ip.h>
#include <linux/udp.h>
#include <net/route.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
#include <linux/netfilter_ipv4/ip_conntrack.h>
#include <linux/netfilter_ipv4/ip_conntrack_helper.h>
MODULE_AUTHOR
(
"Patrick McHardy <kaber@trash.net>"
);
MODULE_DESCRIPTION
(
"NetBIOS name service broadcast connection tracking helper"
);
MODULE_LICENSE
(
"GPL"
);
static
unsigned
int
timeout
=
3
;
module_param
(
timeout
,
int
,
0600
);
MODULE_PARM_DESC
(
timeout
,
"timeout for master connection/replies in seconds"
);
static
int
help
(
struct
sk_buff
**
pskb
,
struct
ip_conntrack
*
ct
,
enum
ip_conntrack_info
ctinfo
)
{
struct
ip_conntrack_expect
*
exp
;
struct
iphdr
*
iph
=
(
*
pskb
)
->
nh
.
iph
;
struct
udphdr
_uh
,
*
uh
;
struct
rtable
*
rt
=
(
struct
rtable
*
)(
*
pskb
)
->
dst
;
struct
in_device
*
in_dev
;
u_int32_t
mask
=
0
;
/* we're only interested in locally generated packets */
if
((
*
pskb
)
->
sk
==
NULL
)
goto
out
;
if
(
rt
==
NULL
||
!
(
rt
->
rt_flags
&
RTCF_BROADCAST
))
goto
out
;
if
(
CTINFO2DIR
(
ctinfo
)
!=
IP_CT_DIR_ORIGINAL
)
goto
out
;
rcu_read_lock
();
in_dev
=
__in_dev_get
(
rt
->
u
.
dst
.
dev
);
if
(
in_dev
!=
NULL
)
{
for_primary_ifa
(
in_dev
)
{
if
(
ifa
->
ifa_broadcast
==
iph
->
daddr
)
{
mask
=
ifa
->
ifa_mask
;
break
;
}
}
endfor_ifa
(
in_dev
);
}
rcu_read_unlock
();
if
(
mask
==
0
)
goto
out
;
uh
=
skb_header_pointer
(
*
pskb
,
iph
->
ihl
*
4
,
sizeof
(
_uh
),
&
_uh
);
BUG_ON
(
uh
==
NULL
);
exp
=
ip_conntrack_expect_alloc
(
ct
);
if
(
exp
==
NULL
)
goto
out
;
memset
(
&
exp
->
tuple
,
0
,
sizeof
(
exp
->
tuple
));
exp
->
tuple
.
src
.
ip
=
iph
->
daddr
&
mask
;
exp
->
tuple
.
dst
.
ip
=
iph
->
saddr
;
exp
->
tuple
.
dst
.
u
.
udp
.
port
=
uh
->
source
;
exp
->
tuple
.
dst
.
protonum
=
IPPROTO_UDP
;
memset
(
&
exp
->
mask
,
0
,
sizeof
(
exp
->
mask
));
exp
->
mask
.
src
.
ip
=
mask
;
exp
->
mask
.
dst
.
ip
=
0xFFFFFFFF
;
exp
->
mask
.
dst
.
u
.
udp
.
port
=
0xFFFF
;
exp
->
mask
.
dst
.
protonum
=
0xFF
;
exp
->
expectfn
=
NULL
;
exp
->
flags
=
IP_CT_EXPECT_PERMANENT
;
ip_conntrack_expect_related
(
exp
);
ip_conntrack_expect_put
(
exp
);
ip_ct_refresh_acct
(
ct
,
ctinfo
,
NULL
,
timeout
*
HZ
);
out:
return
NF_ACCEPT
;
}
static
struct
ip_conntrack_helper
helper
=
{
.
name
=
"netbios-ns"
,
.
tuple
=
{
.
src
.
u
.
udp
.
port
=
__constant_htons
(
137
),
.
dst
.
protonum
=
IPPROTO_UDP
,
},
.
mask
=
{
.
src
.
u
.
udp
.
port
=
0xFFFF
,
.
dst
.
protonum
=
0xFF
,
},
.
max_expected
=
1
,
.
me
=
THIS_MODULE
,
.
help
=
help
,
};
static
int
__init
init
(
void
)
{
helper
.
timeout
=
timeout
;
return
ip_conntrack_helper_register
(
&
helper
);
}
static
void
__exit
fini
(
void
)
{
ip_conntrack_helper_unregister
(
&
helper
);
}
module_init
(
init
);
module_exit
(
fini
);
net/ipv4/netfilter/ip_conntrack_netlink.c
View file @
f7402dc4
...
@@ -1349,8 +1349,10 @@ ctnetlink_del_expect(struct sock *ctnl, struct sk_buff *skb,
...
@@ -1349,8 +1349,10 @@ ctnetlink_del_expect(struct sock *ctnl, struct sk_buff *skb,
list_for_each_entry_safe
(
exp
,
tmp
,
&
ip_conntrack_expect_list
,
list_for_each_entry_safe
(
exp
,
tmp
,
&
ip_conntrack_expect_list
,
list
)
{
list
)
{
if
(
exp
->
master
->
helper
==
h
if
(
exp
->
master
->
helper
==
h
&&
del_timer
(
&
exp
->
timeout
))
&&
del_timer
(
&
exp
->
timeout
))
{
__ip_ct_expect_unlink_destroy
(
exp
);
ip_ct_unlink_expect
(
exp
);
ip_conntrack_expect_put
(
exp
);
}
}
}
write_unlock
(
&
ip_conntrack_lock
);
write_unlock
(
&
ip_conntrack_lock
);
}
else
{
}
else
{
...
@@ -1358,8 +1360,10 @@ ctnetlink_del_expect(struct sock *ctnl, struct sk_buff *skb,
...
@@ -1358,8 +1360,10 @@ ctnetlink_del_expect(struct sock *ctnl, struct sk_buff *skb,
write_lock_bh
(
&
ip_conntrack_lock
);
write_lock_bh
(
&
ip_conntrack_lock
);
list_for_each_entry_safe
(
exp
,
tmp
,
&
ip_conntrack_expect_list
,
list_for_each_entry_safe
(
exp
,
tmp
,
&
ip_conntrack_expect_list
,
list
)
{
list
)
{
if
(
del_timer
(
&
exp
->
timeout
))
if
(
del_timer
(
&
exp
->
timeout
))
{
__ip_ct_expect_unlink_destroy
(
exp
);
ip_ct_unlink_expect
(
exp
);
ip_conntrack_expect_put
(
exp
);
}
}
}
write_unlock_bh
(
&
ip_conntrack_lock
);
write_unlock_bh
(
&
ip_conntrack_lock
);
}
}
...
@@ -1413,6 +1417,7 @@ ctnetlink_create_expect(struct nfattr *cda[])
...
@@ -1413,6 +1417,7 @@ ctnetlink_create_expect(struct nfattr *cda[])
}
}
exp
->
expectfn
=
NULL
;
exp
->
expectfn
=
NULL
;
exp
->
flags
=
0
;
exp
->
master
=
ct
;
exp
->
master
=
ct
;
memcpy
(
&
exp
->
tuple
,
&
tuple
,
sizeof
(
struct
ip_conntrack_tuple
));
memcpy
(
&
exp
->
tuple
,
&
tuple
,
sizeof
(
struct
ip_conntrack_tuple
));
memcpy
(
&
exp
->
mask
,
&
mask
,
sizeof
(
struct
ip_conntrack_tuple
));
memcpy
(
&
exp
->
mask
,
&
mask
,
sizeof
(
struct
ip_conntrack_tuple
));
...
...
net/ipv4/netfilter/ip_conntrack_proto_tcp.c
View file @
f7402dc4
...
@@ -349,6 +349,7 @@ static int tcp_to_nfattr(struct sk_buff *skb, struct nfattr *nfa,
...
@@ -349,6 +349,7 @@ static int tcp_to_nfattr(struct sk_buff *skb, struct nfattr *nfa,
return
0
;
return
0
;
nfattr_failure:
nfattr_failure:
read_unlock_bh
(
&
tcp_lock
);
return
-
1
;
return
-
1
;
}
}
#endif
#endif
...
...
net/ipv4/netfilter/ip_conntrack_standalone.c
View file @
f7402dc4
...
@@ -998,7 +998,7 @@ EXPORT_SYMBOL(ip_conntrack_expect_related);
...
@@ -998,7 +998,7 @@ EXPORT_SYMBOL(ip_conntrack_expect_related);
EXPORT_SYMBOL
(
ip_conntrack_unexpect_related
);
EXPORT_SYMBOL
(
ip_conntrack_unexpect_related
);
EXPORT_SYMBOL_GPL
(
ip_conntrack_expect_list
);
EXPORT_SYMBOL_GPL
(
ip_conntrack_expect_list
);
EXPORT_SYMBOL_GPL
(
__ip_conntrack_expect_find
);
EXPORT_SYMBOL_GPL
(
__ip_conntrack_expect_find
);
EXPORT_SYMBOL_GPL
(
__ip_ct_expect_unlink_destroy
);
EXPORT_SYMBOL_GPL
(
ip_ct_unlink_expect
);
EXPORT_SYMBOL
(
ip_conntrack_tuple_taken
);
EXPORT_SYMBOL
(
ip_conntrack_tuple_taken
);
EXPORT_SYMBOL
(
ip_ct_gather_frags
);
EXPORT_SYMBOL
(
ip_ct_gather_frags
);
...
...
net/ipv4/netfilter/ip_conntrack_tftp.c
View file @
f7402dc4
...
@@ -75,6 +75,7 @@ static int tftp_help(struct sk_buff **pskb,
...
@@ -75,6 +75,7 @@ static int tftp_help(struct sk_buff **pskb,
exp
->
mask
.
dst
.
u
.
udp
.
port
=
0xffff
;
exp
->
mask
.
dst
.
u
.
udp
.
port
=
0xffff
;
exp
->
mask
.
dst
.
protonum
=
0xff
;
exp
->
mask
.
dst
.
protonum
=
0xff
;
exp
->
expectfn
=
NULL
;
exp
->
expectfn
=
NULL
;
exp
->
flags
=
0
;
DEBUGP
(
"expect: "
);
DEBUGP
(
"expect: "
);
DUMP_TUPLE
(
&
exp
->
tuple
);
DUMP_TUPLE
(
&
exp
->
tuple
);
...
...
net/ipv4/netfilter/ip_nat_rule.c
View file @
f7402dc4
...
@@ -255,6 +255,27 @@ alloc_null_binding(struct ip_conntrack *conntrack,
...
@@ -255,6 +255,27 @@ alloc_null_binding(struct ip_conntrack *conntrack,
return
ip_nat_setup_info
(
conntrack
,
&
range
,
hooknum
);
return
ip_nat_setup_info
(
conntrack
,
&
range
,
hooknum
);
}
}
unsigned
int
alloc_null_binding_confirmed
(
struct
ip_conntrack
*
conntrack
,
struct
ip_nat_info
*
info
,
unsigned
int
hooknum
)
{
u_int32_t
ip
=
(
HOOK2MANIP
(
hooknum
)
==
IP_NAT_MANIP_SRC
?
conntrack
->
tuplehash
[
IP_CT_DIR_REPLY
].
tuple
.
dst
.
ip
:
conntrack
->
tuplehash
[
IP_CT_DIR_REPLY
].
tuple
.
src
.
ip
);
u_int16_t
all
=
(
HOOK2MANIP
(
hooknum
)
==
IP_NAT_MANIP_SRC
?
conntrack
->
tuplehash
[
IP_CT_DIR_REPLY
].
tuple
.
dst
.
u
.
all
:
conntrack
->
tuplehash
[
IP_CT_DIR_REPLY
].
tuple
.
src
.
u
.
all
);
struct
ip_nat_range
range
=
{
IP_NAT_RANGE_MAP_IPS
,
ip
,
ip
,
{
all
},
{
all
}
};
DEBUGP
(
"Allocating NULL binding for confirmed %p (%u.%u.%u.%u)
\n
"
,
conntrack
,
NIPQUAD
(
ip
));
return
ip_nat_setup_info
(
conntrack
,
&
range
,
hooknum
);
}
int
ip_nat_rule_find
(
struct
sk_buff
**
pskb
,
int
ip_nat_rule_find
(
struct
sk_buff
**
pskb
,
unsigned
int
hooknum
,
unsigned
int
hooknum
,
const
struct
net_device
*
in
,
const
struct
net_device
*
in
,
...
...
net/ipv4/netfilter/ip_nat_standalone.c
View file @
f7402dc4
...
@@ -123,8 +123,12 @@ ip_nat_fn(unsigned int hooknum,
...
@@ -123,8 +123,12 @@ ip_nat_fn(unsigned int hooknum,
if
(
!
ip_nat_initialized
(
ct
,
maniptype
))
{
if
(
!
ip_nat_initialized
(
ct
,
maniptype
))
{
unsigned
int
ret
;
unsigned
int
ret
;
/* LOCAL_IN hook doesn't have a chain! */
if
(
unlikely
(
is_confirmed
(
ct
)))
if
(
hooknum
==
NF_IP_LOCAL_IN
)
/* NAT module was loaded late */
ret
=
alloc_null_binding_confirmed
(
ct
,
info
,
hooknum
);
else
if
(
hooknum
==
NF_IP_LOCAL_IN
)
/* LOCAL_IN hook doesn't have a chain! */
ret
=
alloc_null_binding
(
ct
,
info
,
hooknum
);
ret
=
alloc_null_binding
(
ct
,
info
,
hooknum
);
else
else
ret
=
ip_nat_rule_find
(
pskb
,
hooknum
,
ret
=
ip_nat_rule_find
(
pskb
,
hooknum
,
...
...
net/netfilter/nfnetlink_queue.c
View file @
f7402dc4
...
@@ -371,6 +371,12 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue,
...
@@ -371,6 +371,12 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue,
break
;
break
;
case
NFQNL_COPY_PACKET
:
case
NFQNL_COPY_PACKET
:
if
(
entry
->
skb
->
ip_summed
==
CHECKSUM_HW
&&
(
*
errp
=
skb_checksum_help
(
entry
->
skb
,
entry
->
info
->
outdev
==
NULL
)))
{
spin_unlock_bh
(
&
queue
->
lock
);
return
NULL
;
}
if
(
queue
->
copy_range
==
0
if
(
queue
->
copy_range
==
0
||
queue
->
copy_range
>
entry
->
skb
->
len
)
||
queue
->
copy_range
>
entry
->
skb
->
len
)
data_len
=
entry
->
skb
->
len
;
data_len
=
entry
->
skb
->
len
;
...
@@ -636,7 +642,7 @@ nfqnl_mangle(void *data, int data_len, struct nfqnl_queue_entry *e)
...
@@ -636,7 +642,7 @@ nfqnl_mangle(void *data, int data_len, struct nfqnl_queue_entry *e)
if
(
!
skb_make_writable
(
&
e
->
skb
,
data_len
))
if
(
!
skb_make_writable
(
&
e
->
skb
,
data_len
))
return
-
ENOMEM
;
return
-
ENOMEM
;
memcpy
(
e
->
skb
->
data
,
data
,
data_len
);
memcpy
(
e
->
skb
->
data
,
data
,
data_len
);
e
->
skb
->
ip_summed
=
CHECKSUM_NONE
;
return
0
;
return
0
;
}
}
...
...
net/netlink/af_netlink.c
View file @
f7402dc4
...
@@ -398,24 +398,13 @@ static int netlink_create(struct socket *sock, int protocol)
...
@@ -398,24 +398,13 @@ static int netlink_create(struct socket *sock, int protocol)
if
(
nl_table
[
protocol
].
registered
&&
if
(
nl_table
[
protocol
].
registered
&&
try_module_get
(
nl_table
[
protocol
].
module
))
try_module_get
(
nl_table
[
protocol
].
module
))
module
=
nl_table
[
protocol
].
module
;
module
=
nl_table
[
protocol
].
module
;
else
err
=
-
EPROTONOSUPPORT
;
groups
=
nl_table
[
protocol
].
groups
;
groups
=
nl_table
[
protocol
].
groups
;
netlink_unlock_table
();
netlink_unlock_table
();
if
(
err
||
(
err
=
__netlink_create
(
sock
,
protocol
)
<
0
))
if
((
err
=
__netlink_create
(
sock
,
protocol
)
<
0
))
goto
out_module
;
goto
out_module
;
nlk
=
nlk_sk
(
sock
->
sk
);
nlk
=
nlk_sk
(
sock
->
sk
);
nlk
->
groups
=
kmalloc
(
NLGRPSZ
(
groups
),
GFP_KERNEL
);
if
(
nlk
->
groups
==
NULL
)
{
err
=
-
ENOMEM
;
goto
out_module
;
}
memset
(
nlk
->
groups
,
0
,
NLGRPSZ
(
groups
));
nlk
->
ngroups
=
groups
;
nlk
->
module
=
module
;
nlk
->
module
=
module
;
out:
out:
return
err
;
return
err
;
...
@@ -534,6 +523,29 @@ netlink_update_subscriptions(struct sock *sk, unsigned int subscriptions)
...
@@ -534,6 +523,29 @@ netlink_update_subscriptions(struct sock *sk, unsigned int subscriptions)
nlk
->
subscriptions
=
subscriptions
;
nlk
->
subscriptions
=
subscriptions
;
}
}
static
int
netlink_alloc_groups
(
struct
sock
*
sk
)
{
struct
netlink_sock
*
nlk
=
nlk_sk
(
sk
);
unsigned
int
groups
;
int
err
=
0
;
netlink_lock_table
();
groups
=
nl_table
[
sk
->
sk_protocol
].
groups
;
if
(
!
nl_table
[
sk
->
sk_protocol
].
registered
)
err
=
-
ENOENT
;
netlink_unlock_table
();
if
(
err
)
return
err
;
nlk
->
groups
=
kmalloc
(
NLGRPSZ
(
groups
),
GFP_KERNEL
);
if
(
nlk
->
groups
==
NULL
)
return
-
ENOMEM
;
memset
(
nlk
->
groups
,
0
,
NLGRPSZ
(
groups
));
nlk
->
ngroups
=
groups
;
return
0
;
}
static
int
netlink_bind
(
struct
socket
*
sock
,
struct
sockaddr
*
addr
,
int
addr_len
)
static
int
netlink_bind
(
struct
socket
*
sock
,
struct
sockaddr
*
addr
,
int
addr_len
)
{
{
struct
sock
*
sk
=
sock
->
sk
;
struct
sock
*
sk
=
sock
->
sk
;
...
@@ -545,8 +557,15 @@ static int netlink_bind(struct socket *sock, struct sockaddr *addr, int addr_len
...
@@ -545,8 +557,15 @@ static int netlink_bind(struct socket *sock, struct sockaddr *addr, int addr_len
return
-
EINVAL
;
return
-
EINVAL
;
/* Only superuser is allowed to listen multicasts */
/* Only superuser is allowed to listen multicasts */
if
(
nladdr
->
nl_groups
&&
!
netlink_capable
(
sock
,
NL_NONROOT_RECV
))
if
(
nladdr
->
nl_groups
)
{
return
-
EPERM
;
if
(
!
netlink_capable
(
sock
,
NL_NONROOT_RECV
))
return
-
EPERM
;
if
(
nlk
->
groups
==
NULL
)
{
err
=
netlink_alloc_groups
(
sk
);
if
(
err
)
return
err
;
}
}
if
(
nlk
->
pid
)
{
if
(
nlk
->
pid
)
{
if
(
nladdr
->
nl_pid
!=
nlk
->
pid
)
if
(
nladdr
->
nl_pid
!=
nlk
->
pid
)
...
@@ -559,7 +578,7 @@ static int netlink_bind(struct socket *sock, struct sockaddr *addr, int addr_len
...
@@ -559,7 +578,7 @@ static int netlink_bind(struct socket *sock, struct sockaddr *addr, int addr_len
return
err
;
return
err
;
}
}
if
(
!
nladdr
->
nl_groups
&&
!
(
u32
)
nlk
->
groups
[
0
]
)
if
(
!
nladdr
->
nl_groups
&&
(
nlk
->
groups
==
NULL
||
!
(
u32
)
nlk
->
groups
[
0
])
)
return
0
;
return
0
;
netlink_table_grab
();
netlink_table_grab
();
...
@@ -620,7 +639,7 @@ static int netlink_getname(struct socket *sock, struct sockaddr *addr, int *addr
...
@@ -620,7 +639,7 @@ static int netlink_getname(struct socket *sock, struct sockaddr *addr, int *addr
nladdr
->
nl_groups
=
netlink_group_mask
(
nlk
->
dst_group
);
nladdr
->
nl_groups
=
netlink_group_mask
(
nlk
->
dst_group
);
}
else
{
}
else
{
nladdr
->
nl_pid
=
nlk
->
pid
;
nladdr
->
nl_pid
=
nlk
->
pid
;
nladdr
->
nl_groups
=
nlk
->
groups
[
0
]
;
nladdr
->
nl_groups
=
nlk
->
groups
?
nlk
->
groups
[
0
]
:
0
;
}
}
return
0
;
return
0
;
}
}
...
@@ -976,6 +995,11 @@ static int netlink_setsockopt(struct socket *sock, int level, int optname,
...
@@ -976,6 +995,11 @@ static int netlink_setsockopt(struct socket *sock, int level, int optname,
if
(
!
netlink_capable
(
sock
,
NL_NONROOT_RECV
))
if
(
!
netlink_capable
(
sock
,
NL_NONROOT_RECV
))
return
-
EPERM
;
return
-
EPERM
;
if
(
nlk
->
groups
==
NULL
)
{
err
=
netlink_alloc_groups
(
sk
);
if
(
err
)
return
err
;
}
if
(
!
val
||
val
-
1
>=
nlk
->
ngroups
)
if
(
!
val
||
val
-
1
>=
nlk
->
ngroups
)
return
-
EINVAL
;
return
-
EINVAL
;
netlink_table_grab
();
netlink_table_grab
();
...
@@ -1483,8 +1507,7 @@ static int netlink_seq_show(struct seq_file *seq, void *v)
...
@@ -1483,8 +1507,7 @@ static int netlink_seq_show(struct seq_file *seq, void *v)
s
,
s
,
s
->
sk_protocol
,
s
->
sk_protocol
,
nlk
->
pid
,
nlk
->
pid
,
nlk
->
flags
&
NETLINK_KERNEL_SOCKET
?
nlk
->
groups
?
(
u32
)
nlk
->
groups
[
0
]
:
0
,
0
:
(
unsigned
int
)
nlk
->
groups
[
0
],
atomic_read
(
&
s
->
sk_rmem_alloc
),
atomic_read
(
&
s
->
sk_rmem_alloc
),
atomic_read
(
&
s
->
sk_wmem_alloc
),
atomic_read
(
&
s
->
sk_wmem_alloc
),
nlk
->
cb
,
nlk
->
cb
,
...
...
net/netrom/af_netrom.c
View file @
f7402dc4
...
@@ -1261,6 +1261,7 @@ static int nr_info_show(struct seq_file *seq, void *v)
...
@@ -1261,6 +1261,7 @@ static int nr_info_show(struct seq_file *seq, void *v)
struct
net_device
*
dev
;
struct
net_device
*
dev
;
struct
nr_sock
*
nr
;
struct
nr_sock
*
nr
;
const
char
*
devname
;
const
char
*
devname
;
char
buf
[
11
];
if
(
v
==
SEQ_START_TOKEN
)
if
(
v
==
SEQ_START_TOKEN
)
seq_puts
(
seq
,
seq_puts
(
seq
,
...
@@ -1276,11 +1277,11 @@ static int nr_info_show(struct seq_file *seq, void *v)
...
@@ -1276,11 +1277,11 @@ static int nr_info_show(struct seq_file *seq, void *v)
else
else
devname
=
dev
->
name
;
devname
=
dev
->
name
;
seq_printf
(
seq
,
"%-9s "
,
ax2asc
(
&
nr
->
user_addr
));
seq_printf
(
seq
,
"%-9s "
,
ax2asc
(
buf
,
&
nr
->
user_addr
));
seq_printf
(
seq
,
"%-9s "
,
ax2asc
(
&
nr
->
dest_addr
));
seq_printf
(
seq
,
"%-9s "
,
ax2asc
(
buf
,
&
nr
->
dest_addr
));
seq_printf
(
seq
,
seq_printf
(
seq
,
"%-9s %-3s %02X/%02X %02X/%02X %2d %3d %3d %3d %3lu/%03lu %2lu/%02lu %3lu/%03lu %3lu/%03lu %2d/%02d %3d %5d %5d %ld
\n
"
,
"%-9s %-3s %02X/%02X %02X/%02X %2d %3d %3d %3d %3lu/%03lu %2lu/%02lu %3lu/%03lu %3lu/%03lu %2d/%02d %3d %5d %5d %ld
\n
"
,
ax2asc
(
&
nr
->
source_addr
),
ax2asc
(
buf
,
&
nr
->
source_addr
),
devname
,
devname
,
nr
->
my_index
,
nr
->
my_index
,
nr
->
my_id
,
nr
->
my_id
,
...
...
net/netrom/nr_route.c
View file @
f7402dc4
...
@@ -881,6 +881,7 @@ static void nr_node_stop(struct seq_file *seq, void *v)
...
@@ -881,6 +881,7 @@ static void nr_node_stop(struct seq_file *seq, void *v)
static
int
nr_node_show
(
struct
seq_file
*
seq
,
void
*
v
)
static
int
nr_node_show
(
struct
seq_file
*
seq
,
void
*
v
)
{
{
char
buf
[
11
];
int
i
;
int
i
;
if
(
v
==
SEQ_START_TOKEN
)
if
(
v
==
SEQ_START_TOKEN
)
...
@@ -890,7 +891,7 @@ static int nr_node_show(struct seq_file *seq, void *v)
...
@@ -890,7 +891,7 @@ static int nr_node_show(struct seq_file *seq, void *v)
struct
nr_node
*
nr_node
=
v
;
struct
nr_node
*
nr_node
=
v
;
nr_node_lock
(
nr_node
);
nr_node_lock
(
nr_node
);
seq_printf
(
seq
,
"%-9s %-7s %d %d"
,
seq_printf
(
seq
,
"%-9s %-7s %d %d"
,
ax2asc
(
&
nr_node
->
callsign
),
ax2asc
(
buf
,
&
nr_node
->
callsign
),
(
nr_node
->
mnemonic
[
0
]
==
'\0'
)
?
"*"
:
nr_node
->
mnemonic
,
(
nr_node
->
mnemonic
[
0
]
==
'\0'
)
?
"*"
:
nr_node
->
mnemonic
,
nr_node
->
which
+
1
,
nr_node
->
which
+
1
,
nr_node
->
count
);
nr_node
->
count
);
...
@@ -964,6 +965,7 @@ static void nr_neigh_stop(struct seq_file *seq, void *v)
...
@@ -964,6 +965,7 @@ static void nr_neigh_stop(struct seq_file *seq, void *v)
static
int
nr_neigh_show
(
struct
seq_file
*
seq
,
void
*
v
)
static
int
nr_neigh_show
(
struct
seq_file
*
seq
,
void
*
v
)
{
{
char
buf
[
11
];
int
i
;
int
i
;
if
(
v
==
SEQ_START_TOKEN
)
if
(
v
==
SEQ_START_TOKEN
)
...
@@ -973,7 +975,7 @@ static int nr_neigh_show(struct seq_file *seq, void *v)
...
@@ -973,7 +975,7 @@ static int nr_neigh_show(struct seq_file *seq, void *v)
seq_printf
(
seq
,
"%05d %-9s %-4s %3d %d %3d %3d"
,
seq_printf
(
seq
,
"%05d %-9s %-4s %3d %d %3d %3d"
,
nr_neigh
->
number
,
nr_neigh
->
number
,
ax2asc
(
&
nr_neigh
->
callsign
),
ax2asc
(
buf
,
&
nr_neigh
->
callsign
),
nr_neigh
->
dev
?
nr_neigh
->
dev
->
name
:
"???"
,
nr_neigh
->
dev
?
nr_neigh
->
dev
->
name
:
"???"
,
nr_neigh
->
quality
,
nr_neigh
->
quality
,
nr_neigh
->
locked
,
nr_neigh
->
locked
,
...
@@ -983,7 +985,7 @@ static int nr_neigh_show(struct seq_file *seq, void *v)
...
@@ -983,7 +985,7 @@ static int nr_neigh_show(struct seq_file *seq, void *v)
if
(
nr_neigh
->
digipeat
!=
NULL
)
{
if
(
nr_neigh
->
digipeat
!=
NULL
)
{
for
(
i
=
0
;
i
<
nr_neigh
->
digipeat
->
ndigi
;
i
++
)
for
(
i
=
0
;
i
<
nr_neigh
->
digipeat
->
ndigi
;
i
++
)
seq_printf
(
seq
,
" %s"
,
seq_printf
(
seq
,
" %s"
,
ax2asc
(
&
nr_neigh
->
digipeat
->
calls
[
i
]));
ax2asc
(
buf
,
&
nr_neigh
->
digipeat
->
calls
[
i
]));
}
}
seq_puts
(
seq
,
"
\n
"
);
seq_puts
(
seq
,
"
\n
"
);
...
...
net/packet/af_packet.c
View file @
f7402dc4
...
@@ -1535,8 +1535,7 @@ static unsigned int packet_poll(struct file * file, struct socket *sock,
...
@@ -1535,8 +1535,7 @@ static unsigned int packet_poll(struct file * file, struct socket *sock,
static
void
packet_mm_open
(
struct
vm_area_struct
*
vma
)
static
void
packet_mm_open
(
struct
vm_area_struct
*
vma
)
{
{
struct
file
*
file
=
vma
->
vm_file
;
struct
file
*
file
=
vma
->
vm_file
;
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
struct
socket
*
sock
=
file
->
private_data
;
struct
socket
*
sock
=
SOCKET_I
(
inode
);
struct
sock
*
sk
=
sock
->
sk
;
struct
sock
*
sk
=
sock
->
sk
;
if
(
sk
)
if
(
sk
)
...
@@ -1546,8 +1545,7 @@ static void packet_mm_open(struct vm_area_struct *vma)
...
@@ -1546,8 +1545,7 @@ static void packet_mm_open(struct vm_area_struct *vma)
static
void
packet_mm_close
(
struct
vm_area_struct
*
vma
)
static
void
packet_mm_close
(
struct
vm_area_struct
*
vma
)
{
{
struct
file
*
file
=
vma
->
vm_file
;
struct
file
*
file
=
vma
->
vm_file
;
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
struct
socket
*
sock
=
file
->
private_data
;
struct
socket
*
sock
=
SOCKET_I
(
inode
);
struct
sock
*
sk
=
sock
->
sk
;
struct
sock
*
sk
=
sock
->
sk
;
if
(
sk
)
if
(
sk
)
...
...
net/rose/af_rose.c
View file @
f7402dc4
...
@@ -1363,6 +1363,8 @@ static void rose_info_stop(struct seq_file *seq, void *v)
...
@@ -1363,6 +1363,8 @@ static void rose_info_stop(struct seq_file *seq, void *v)
static
int
rose_info_show
(
struct
seq_file
*
seq
,
void
*
v
)
static
int
rose_info_show
(
struct
seq_file
*
seq
,
void
*
v
)
{
{
char
buf
[
11
];
if
(
v
==
SEQ_START_TOKEN
)
if
(
v
==
SEQ_START_TOKEN
)
seq_puts
(
seq
,
seq_puts
(
seq
,
"dest_addr dest_call src_addr src_call dev lci neigh st vs vr va t t1 t2 t3 hb idle Snd-Q Rcv-Q inode
\n
"
);
"dest_addr dest_call src_addr src_call dev lci neigh st vs vr va t t1 t2 t3 hb idle Snd-Q Rcv-Q inode
\n
"
);
...
@@ -1380,12 +1382,12 @@ static int rose_info_show(struct seq_file *seq, void *v)
...
@@ -1380,12 +1382,12 @@ static int rose_info_show(struct seq_file *seq, void *v)
seq_printf
(
seq
,
"%-10s %-9s "
,
seq_printf
(
seq
,
"%-10s %-9s "
,
rose2asc
(
&
rose
->
dest_addr
),
rose2asc
(
&
rose
->
dest_addr
),
ax2asc
(
&
rose
->
dest_call
));
ax2asc
(
buf
,
&
rose
->
dest_call
));
if
(
ax25cmp
(
&
rose
->
source_call
,
&
null_ax25_address
)
==
0
)
if
(
ax25cmp
(
&
rose
->
source_call
,
&
null_ax25_address
)
==
0
)
callsign
=
"??????-?"
;
callsign
=
"??????-?"
;
else
else
callsign
=
ax2asc
(
&
rose
->
source_call
);
callsign
=
ax2asc
(
buf
,
&
rose
->
source_call
);
seq_printf
(
seq
,
seq_printf
(
seq
,
"%-10s %-9s %-5s %3.3X %05d %d %d %d %d %3lu %3lu %3lu %3lu %3lu %3lu/%03lu %5d %5d %ld
\n
"
,
"%-10s %-9s %-5s %3.3X %05d %d %d %d %d %3lu %3lu %3lu %3lu %3lu %3lu/%03lu %5d %5d %ld
\n
"
,
...
...
net/rose/rose_route.c
View file @
f7402dc4
...
@@ -851,6 +851,7 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25)
...
@@ -851,6 +851,7 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25)
unsigned
char
cause
,
diagnostic
;
unsigned
char
cause
,
diagnostic
;
struct
net_device
*
dev
;
struct
net_device
*
dev
;
int
len
,
res
=
0
;
int
len
,
res
=
0
;
char
buf
[
11
];
#if 0
#if 0
if (call_in_firewall(PF_ROSE, skb->dev, skb->data, NULL, &skb) != FW_ACCEPT)
if (call_in_firewall(PF_ROSE, skb->dev, skb->data, NULL, &skb) != FW_ACCEPT)
...
@@ -876,7 +877,7 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25)
...
@@ -876,7 +877,7 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25)
if
(
rose_neigh
==
NULL
)
{
if
(
rose_neigh
==
NULL
)
{
printk
(
"rose_route : unknown neighbour or device %s
\n
"
,
printk
(
"rose_route : unknown neighbour or device %s
\n
"
,
ax2asc
(
&
ax25
->
dest_addr
));
ax2asc
(
buf
,
&
ax25
->
dest_addr
));
goto
out
;
goto
out
;
}
}
...
@@ -1178,6 +1179,7 @@ static void rose_neigh_stop(struct seq_file *seq, void *v)
...
@@ -1178,6 +1179,7 @@ static void rose_neigh_stop(struct seq_file *seq, void *v)
static
int
rose_neigh_show
(
struct
seq_file
*
seq
,
void
*
v
)
static
int
rose_neigh_show
(
struct
seq_file
*
seq
,
void
*
v
)
{
{
char
buf
[
11
];
int
i
;
int
i
;
if
(
v
==
SEQ_START_TOKEN
)
if
(
v
==
SEQ_START_TOKEN
)
...
@@ -1189,7 +1191,7 @@ static int rose_neigh_show(struct seq_file *seq, void *v)
...
@@ -1189,7 +1191,7 @@ static int rose_neigh_show(struct seq_file *seq, void *v)
/* if (!rose_neigh->loopback) { */
/* if (!rose_neigh->loopback) { */
seq_printf
(
seq
,
"%05d %-9s %-4s %3d %3d %3s %3s %3lu %3lu"
,
seq_printf
(
seq
,
"%05d %-9s %-4s %3d %3d %3s %3s %3lu %3lu"
,
rose_neigh
->
number
,
rose_neigh
->
number
,
(
rose_neigh
->
loopback
)
?
"RSLOOP-0"
:
ax2asc
(
&
rose_neigh
->
callsign
),
(
rose_neigh
->
loopback
)
?
"RSLOOP-0"
:
ax2asc
(
buf
,
&
rose_neigh
->
callsign
),
rose_neigh
->
dev
?
rose_neigh
->
dev
->
name
:
"???"
,
rose_neigh
->
dev
?
rose_neigh
->
dev
->
name
:
"???"
,
rose_neigh
->
count
,
rose_neigh
->
count
,
rose_neigh
->
use
,
rose_neigh
->
use
,
...
@@ -1200,7 +1202,7 @@ static int rose_neigh_show(struct seq_file *seq, void *v)
...
@@ -1200,7 +1202,7 @@ static int rose_neigh_show(struct seq_file *seq, void *v)
if
(
rose_neigh
->
digipeat
!=
NULL
)
{
if
(
rose_neigh
->
digipeat
!=
NULL
)
{
for
(
i
=
0
;
i
<
rose_neigh
->
digipeat
->
ndigi
;
i
++
)
for
(
i
=
0
;
i
<
rose_neigh
->
digipeat
->
ndigi
;
i
++
)
seq_printf
(
seq
,
" %s"
,
ax2asc
(
&
rose_neigh
->
digipeat
->
calls
[
i
]));
seq_printf
(
seq
,
" %s"
,
ax2asc
(
buf
,
&
rose_neigh
->
digipeat
->
calls
[
i
]));
}
}
seq_puts
(
seq
,
"
\n
"
);
seq_puts
(
seq
,
"
\n
"
);
...
@@ -1260,6 +1262,8 @@ static void rose_route_stop(struct seq_file *seq, void *v)
...
@@ -1260,6 +1262,8 @@ static void rose_route_stop(struct seq_file *seq, void *v)
static
int
rose_route_show
(
struct
seq_file
*
seq
,
void
*
v
)
static
int
rose_route_show
(
struct
seq_file
*
seq
,
void
*
v
)
{
{
char
buf
[
11
];
if
(
v
==
SEQ_START_TOKEN
)
if
(
v
==
SEQ_START_TOKEN
)
seq_puts
(
seq
,
seq_puts
(
seq
,
"lci address callsign neigh <-> lci address callsign neigh
\n
"
);
"lci address callsign neigh <-> lci address callsign neigh
\n
"
);
...
@@ -1271,7 +1275,7 @@ static int rose_route_show(struct seq_file *seq, void *v)
...
@@ -1271,7 +1275,7 @@ static int rose_route_show(struct seq_file *seq, void *v)
"%3.3X %-10s %-9s %05d "
,
"%3.3X %-10s %-9s %05d "
,
rose_route
->
lci1
,
rose_route
->
lci1
,
rose2asc
(
&
rose_route
->
src_addr
),
rose2asc
(
&
rose_route
->
src_addr
),
ax2asc
(
&
rose_route
->
src_call
),
ax2asc
(
buf
,
&
rose_route
->
src_call
),
rose_route
->
neigh1
->
number
);
rose_route
->
neigh1
->
number
);
else
else
seq_puts
(
seq
,
seq_puts
(
seq
,
...
@@ -1282,7 +1286,7 @@ static int rose_route_show(struct seq_file *seq, void *v)
...
@@ -1282,7 +1286,7 @@ static int rose_route_show(struct seq_file *seq, void *v)
"%3.3X %-10s %-9s %05d
\n
"
,
"%3.3X %-10s %-9s %05d
\n
"
,
rose_route
->
lci2
,
rose_route
->
lci2
,
rose2asc
(
&
rose_route
->
dest_addr
),
rose2asc
(
&
rose_route
->
dest_addr
),
ax2asc
(
&
rose_route
->
dest_call
),
ax2asc
(
buf
,
&
rose_route
->
dest_call
),
rose_route
->
neigh2
->
number
);
rose_route
->
neigh2
->
number
);
else
else
seq_puts
(
seq
,
seq_puts
(
seq
,
...
...
net/rose/rose_subr.c
View file @
f7402dc4
...
@@ -400,6 +400,7 @@ static int rose_create_facilities(unsigned char *buffer, struct rose_sock *rose)
...
@@ -400,6 +400,7 @@ static int rose_create_facilities(unsigned char *buffer, struct rose_sock *rose)
{
{
unsigned
char
*
p
=
buffer
+
1
;
unsigned
char
*
p
=
buffer
+
1
;
char
*
callsign
;
char
*
callsign
;
char
buf
[
11
];
int
len
,
nb
;
int
len
,
nb
;
/* National Facilities */
/* National Facilities */
...
@@ -456,7 +457,7 @@ static int rose_create_facilities(unsigned char *buffer, struct rose_sock *rose)
...
@@ -456,7 +457,7 @@ static int rose_create_facilities(unsigned char *buffer, struct rose_sock *rose)
*
p
++
=
FAC_CCITT_DEST_NSAP
;
*
p
++
=
FAC_CCITT_DEST_NSAP
;
callsign
=
ax2asc
(
&
rose
->
dest_call
);
callsign
=
ax2asc
(
buf
,
&
rose
->
dest_call
);
*
p
++
=
strlen
(
callsign
)
+
10
;
*
p
++
=
strlen
(
callsign
)
+
10
;
*
p
++
=
(
strlen
(
callsign
)
+
9
)
*
2
;
/* ??? */
*
p
++
=
(
strlen
(
callsign
)
+
9
)
*
2
;
/* ??? */
...
@@ -471,7 +472,7 @@ static int rose_create_facilities(unsigned char *buffer, struct rose_sock *rose)
...
@@ -471,7 +472,7 @@ static int rose_create_facilities(unsigned char *buffer, struct rose_sock *rose)
*
p
++
=
FAC_CCITT_SRC_NSAP
;
*
p
++
=
FAC_CCITT_SRC_NSAP
;
callsign
=
ax2asc
(
&
rose
->
source_call
);
callsign
=
ax2asc
(
buf
,
&
rose
->
source_call
);
*
p
++
=
strlen
(
callsign
)
+
10
;
*
p
++
=
strlen
(
callsign
)
+
10
;
*
p
++
=
(
strlen
(
callsign
)
+
9
)
*
2
;
/* ??? */
*
p
++
=
(
strlen
(
callsign
)
+
9
)
*
2
;
/* ??? */
...
...
net/socket.c
View file @
f7402dc4
...
@@ -667,7 +667,7 @@ static ssize_t sock_aio_read(struct kiocb *iocb, char __user *ubuf,
...
@@ -667,7 +667,7 @@ static ssize_t sock_aio_read(struct kiocb *iocb, char __user *ubuf,
}
}
iocb
->
private
=
x
;
iocb
->
private
=
x
;
x
->
kiocb
=
iocb
;
x
->
kiocb
=
iocb
;
sock
=
SOCKET_I
(
iocb
->
ki_filp
->
f_dentry
->
d_inode
)
;
sock
=
iocb
->
ki_filp
->
private_data
;
x
->
async_msg
.
msg_name
=
NULL
;
x
->
async_msg
.
msg_name
=
NULL
;
x
->
async_msg
.
msg_namelen
=
0
;
x
->
async_msg
.
msg_namelen
=
0
;
...
@@ -709,7 +709,7 @@ static ssize_t sock_aio_write(struct kiocb *iocb, const char __user *ubuf,
...
@@ -709,7 +709,7 @@ static ssize_t sock_aio_write(struct kiocb *iocb, const char __user *ubuf,
}
}
iocb
->
private
=
x
;
iocb
->
private
=
x
;
x
->
kiocb
=
iocb
;
x
->
kiocb
=
iocb
;
sock
=
SOCKET_I
(
iocb
->
ki_filp
->
f_dentry
->
d_inode
)
;
sock
=
iocb
->
ki_filp
->
private_data
;
x
->
async_msg
.
msg_name
=
NULL
;
x
->
async_msg
.
msg_name
=
NULL
;
x
->
async_msg
.
msg_namelen
=
0
;
x
->
async_msg
.
msg_namelen
=
0
;
...
@@ -732,7 +732,7 @@ static ssize_t sock_sendpage(struct file *file, struct page *page,
...
@@ -732,7 +732,7 @@ static ssize_t sock_sendpage(struct file *file, struct page *page,
struct
socket
*
sock
;
struct
socket
*
sock
;
int
flags
;
int
flags
;
sock
=
SOCKET_I
(
file
->
f_dentry
->
d_inode
)
;
sock
=
file
->
private_data
;
flags
=
!
(
file
->
f_flags
&
O_NONBLOCK
)
?
0
:
MSG_DONTWAIT
;
flags
=
!
(
file
->
f_flags
&
O_NONBLOCK
)
?
0
:
MSG_DONTWAIT
;
if
(
more
)
if
(
more
)
...
@@ -741,14 +741,14 @@ static ssize_t sock_sendpage(struct file *file, struct page *page,
...
@@ -741,14 +741,14 @@ static ssize_t sock_sendpage(struct file *file, struct page *page,
return
sock
->
ops
->
sendpage
(
sock
,
page
,
offset
,
size
,
flags
);
return
sock
->
ops
->
sendpage
(
sock
,
page
,
offset
,
size
,
flags
);
}
}
static
int
sock_readv_writev
(
int
type
,
struct
inode
*
inode
,
static
int
sock_readv_writev
(
int
type
,
struct
file
*
file
,
const
struct
iovec
*
iov
,
struct
file
*
file
,
const
struct
iovec
*
iov
,
long
count
,
size_t
size
)
long
count
,
size_t
size
)
{
{
struct
msghdr
msg
;
struct
msghdr
msg
;
struct
socket
*
sock
;
struct
socket
*
sock
;
sock
=
SOCKET_I
(
inode
)
;
sock
=
file
->
private_data
;
msg
.
msg_name
=
NULL
;
msg
.
msg_name
=
NULL
;
msg
.
msg_namelen
=
0
;
msg
.
msg_namelen
=
0
;
...
@@ -775,7 +775,7 @@ static ssize_t sock_readv(struct file *file, const struct iovec *vector,
...
@@ -775,7 +775,7 @@ static ssize_t sock_readv(struct file *file, const struct iovec *vector,
int
i
;
int
i
;
for
(
i
=
0
;
i
<
count
;
i
++
)
for
(
i
=
0
;
i
<
count
;
i
++
)
tot_len
+=
vector
[
i
].
iov_len
;
tot_len
+=
vector
[
i
].
iov_len
;
return
sock_readv_writev
(
VERIFY_WRITE
,
file
->
f_dentry
->
d_inode
,
return
sock_readv_writev
(
VERIFY_WRITE
,
file
,
vector
,
count
,
tot_len
);
file
,
vector
,
count
,
tot_len
);
}
}
...
@@ -786,7 +786,7 @@ static ssize_t sock_writev(struct file *file, const struct iovec *vector,
...
@@ -786,7 +786,7 @@ static ssize_t sock_writev(struct file *file, const struct iovec *vector,
int
i
;
int
i
;
for
(
i
=
0
;
i
<
count
;
i
++
)
for
(
i
=
0
;
i
<
count
;
i
++
)
tot_len
+=
vector
[
i
].
iov_len
;
tot_len
+=
vector
[
i
].
iov_len
;
return
sock_readv_writev
(
VERIFY_READ
,
file
->
f_dentry
->
d_inode
,
return
sock_readv_writev
(
VERIFY_READ
,
file
,
vector
,
count
,
tot_len
);
file
,
vector
,
count
,
tot_len
);
}
}
...
@@ -840,7 +840,7 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg)
...
@@ -840,7 +840,7 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg)
void
__user
*
argp
=
(
void
__user
*
)
arg
;
void
__user
*
argp
=
(
void
__user
*
)
arg
;
int
pid
,
err
;
int
pid
,
err
;
sock
=
SOCKET_I
(
file
->
f_dentry
->
d_inode
)
;
sock
=
file
->
private_data
;
if
(
cmd
>=
SIOCDEVPRIVATE
&&
cmd
<=
(
SIOCDEVPRIVATE
+
15
))
{
if
(
cmd
>=
SIOCDEVPRIVATE
&&
cmd
<=
(
SIOCDEVPRIVATE
+
15
))
{
err
=
dev_ioctl
(
cmd
,
argp
);
err
=
dev_ioctl
(
cmd
,
argp
);
}
else
}
else
...
@@ -939,13 +939,13 @@ static unsigned int sock_poll(struct file *file, poll_table * wait)
...
@@ -939,13 +939,13 @@ static unsigned int sock_poll(struct file *file, poll_table * wait)
/*
/*
* We can't return errors to poll, so it's either yes or no.
* We can't return errors to poll, so it's either yes or no.
*/
*/
sock
=
SOCKET_I
(
file
->
f_dentry
->
d_inode
)
;
sock
=
file
->
private_data
;
return
sock
->
ops
->
poll
(
file
,
sock
,
wait
);
return
sock
->
ops
->
poll
(
file
,
sock
,
wait
);
}
}
static
int
sock_mmap
(
struct
file
*
file
,
struct
vm_area_struct
*
vma
)
static
int
sock_mmap
(
struct
file
*
file
,
struct
vm_area_struct
*
vma
)
{
{
struct
socket
*
sock
=
SOCKET_I
(
file
->
f_dentry
->
d_inode
)
;
struct
socket
*
sock
=
file
->
private_data
;
return
sock
->
ops
->
mmap
(
file
,
sock
,
vma
);
return
sock
->
ops
->
mmap
(
file
,
sock
,
vma
);
}
}
...
@@ -995,7 +995,7 @@ static int sock_fasync(int fd, struct file *filp, int on)
...
@@ -995,7 +995,7 @@ static int sock_fasync(int fd, struct file *filp, int on)
return
-
ENOMEM
;
return
-
ENOMEM
;
}
}
sock
=
SOCKET_I
(
filp
->
f_dentry
->
d_inode
)
;
sock
=
filp
->
private_data
;
if
((
sk
=
sock
->
sk
)
==
NULL
)
{
if
((
sk
=
sock
->
sk
)
==
NULL
)
{
kfree
(
fna
);
kfree
(
fna
);
...
...
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