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
47abf28d
Commit
47abf28d
authored
Sep 09, 2008
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
parents
28faa979
e550dfb0
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
89 additions
and
51 deletions
+89
-51
include/net/bluetooth/hci_core.h
include/net/bluetooth/hci_core.h
+2
-1
net/bluetooth/af_bluetooth.c
net/bluetooth/af_bluetooth.c
+1
-1
net/bluetooth/hci_conn.c
net/bluetooth/hci_conn.c
+18
-3
net/bluetooth/hci_event.c
net/bluetooth/hci_event.c
+4
-7
net/bluetooth/l2cap.c
net/bluetooth/l2cap.c
+28
-6
net/bluetooth/sco.c
net/bluetooth/sco.c
+1
-1
net/ipv6/ip6_output.c
net/ipv6/ip6_output.c
+32
-32
net/xfrm/xfrm_policy.c
net/xfrm/xfrm_policy.c
+1
-0
net/xfrm/xfrm_state.c
net/xfrm/xfrm_state.c
+2
-0
No files found.
include/net/bluetooth/hci_core.h
View file @
47abf28d
...
...
@@ -325,7 +325,8 @@ int hci_conn_del(struct hci_conn *conn);
void
hci_conn_hash_flush
(
struct
hci_dev
*
hdev
);
void
hci_conn_check_pending
(
struct
hci_dev
*
hdev
);
struct
hci_conn
*
hci_connect
(
struct
hci_dev
*
hdev
,
int
type
,
bdaddr_t
*
src
);
struct
hci_conn
*
hci_connect
(
struct
hci_dev
*
hdev
,
int
type
,
bdaddr_t
*
dst
,
__u8
auth_type
);
int
hci_conn_check_link_mode
(
struct
hci_conn
*
conn
);
int
hci_conn_auth
(
struct
hci_conn
*
conn
);
int
hci_conn_encrypt
(
struct
hci_conn
*
conn
);
int
hci_conn_change_link_key
(
struct
hci_conn
*
conn
);
...
...
net/bluetooth/af_bluetooth.c
View file @
47abf28d
...
...
@@ -49,7 +49,7 @@
#define BT_DBG(D...)
#endif
#define VERSION "2.1
2
"
#define VERSION "2.1
3
"
/* Bluetooth sockets */
#define BT_MAX_PROTO 8
...
...
net/bluetooth/hci_conn.c
View file @
47abf28d
...
...
@@ -330,7 +330,7 @@ EXPORT_SYMBOL(hci_get_route);
/* Create SCO or ACL connection.
* Device _must_ be locked */
struct
hci_conn
*
hci_connect
(
struct
hci_dev
*
hdev
,
int
type
,
bdaddr_t
*
dst
)
struct
hci_conn
*
hci_connect
(
struct
hci_dev
*
hdev
,
int
type
,
bdaddr_t
*
dst
,
__u8
auth_type
)
{
struct
hci_conn
*
acl
;
struct
hci_conn
*
sco
;
...
...
@@ -344,8 +344,10 @@ struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst)
hci_conn_hold
(
acl
);
if
(
acl
->
state
==
BT_OPEN
||
acl
->
state
==
BT_CLOSED
)
if
(
acl
->
state
==
BT_OPEN
||
acl
->
state
==
BT_CLOSED
)
{
acl
->
auth_type
=
auth_type
;
hci_acl_connect
(
acl
);
}
if
(
type
==
ACL_LINK
)
return
acl
;
...
...
@@ -374,6 +376,19 @@ struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst)
}
EXPORT_SYMBOL
(
hci_connect
);
/* Check link security requirement */
int
hci_conn_check_link_mode
(
struct
hci_conn
*
conn
)
{
BT_DBG
(
"conn %p"
,
conn
);
if
(
conn
->
ssp_mode
>
0
&&
conn
->
hdev
->
ssp_mode
>
0
&&
!
(
conn
->
link_mode
&
HCI_LM_ENCRYPT
))
return
0
;
return
1
;
}
EXPORT_SYMBOL
(
hci_conn_check_link_mode
);
/* Authenticate remote device */
int
hci_conn_auth
(
struct
hci_conn
*
conn
)
{
...
...
@@ -381,7 +396,7 @@ int hci_conn_auth(struct hci_conn *conn)
if
(
conn
->
ssp_mode
>
0
&&
conn
->
hdev
->
ssp_mode
>
0
)
{
if
(
!
(
conn
->
auth_type
&
0x01
))
{
conn
->
auth_type
=
HCI_AT_GENERAL_BONDING_MITM
;
conn
->
auth_type
|=
0x01
;
conn
->
link_mode
&=
~
HCI_LM_AUTH
;
}
}
...
...
net/bluetooth/hci_event.c
View file @
47abf28d
...
...
@@ -1605,14 +1605,11 @@ static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_b
if
(
conn
->
state
==
BT_CONFIG
)
{
if
(
!
ev
->
status
&&
hdev
->
ssp_mode
>
0
&&
conn
->
ssp_mode
>
0
)
{
if
(
conn
->
out
)
{
struct
hci_cp_auth_requested
cp
;
cp
.
handle
=
ev
->
handle
;
hci_send_cmd
(
hdev
,
HCI_OP_AUTH_REQUESTED
,
conn
->
ssp_mode
>
0
&&
conn
->
out
)
{
struct
hci_cp_auth_requested
cp
;
cp
.
handle
=
ev
->
handle
;
hci_send_cmd
(
hdev
,
HCI_OP_AUTH_REQUESTED
,
sizeof
(
cp
),
&
cp
);
}
}
else
{
conn
->
state
=
BT_CONNECTED
;
hci_proto_connect_cfm
(
conn
,
ev
->
status
);
...
...
net/bluetooth/l2cap.c
View file @
47abf28d
...
...
@@ -55,7 +55,7 @@
#define BT_DBG(D...)
#endif
#define VERSION "2.1
0
"
#define VERSION "2.1
1
"
static
u32
l2cap_feat_mask
=
0x0000
;
...
...
@@ -778,6 +778,7 @@ static int l2cap_do_connect(struct sock *sk)
struct
l2cap_conn
*
conn
;
struct
hci_conn
*
hcon
;
struct
hci_dev
*
hdev
;
__u8
auth_type
;
int
err
=
0
;
BT_DBG
(
"%s -> %s psm 0x%2.2x"
,
batostr
(
src
),
batostr
(
dst
),
l2cap_pi
(
sk
)
->
psm
);
...
...
@@ -789,7 +790,21 @@ static int l2cap_do_connect(struct sock *sk)
err
=
-
ENOMEM
;
hcon
=
hci_connect
(
hdev
,
ACL_LINK
,
dst
);
if
(
l2cap_pi
(
sk
)
->
link_mode
&
L2CAP_LM_AUTH
||
l2cap_pi
(
sk
)
->
link_mode
&
L2CAP_LM_ENCRYPT
||
l2cap_pi
(
sk
)
->
link_mode
&
L2CAP_LM_SECURE
)
{
if
(
l2cap_pi
(
sk
)
->
psm
==
cpu_to_le16
(
0x0001
))
auth_type
=
HCI_AT_NO_BONDING_MITM
;
else
auth_type
=
HCI_AT_GENERAL_BONDING_MITM
;
}
else
{
if
(
l2cap_pi
(
sk
)
->
psm
==
cpu_to_le16
(
0x0001
))
auth_type
=
HCI_AT_NO_BONDING
;
else
auth_type
=
HCI_AT_GENERAL_BONDING
;
}
hcon
=
hci_connect
(
hdev
,
ACL_LINK
,
dst
,
auth_type
);
if
(
!
hcon
)
goto
done
;
...
...
@@ -1553,10 +1568,10 @@ static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hd
struct
l2cap_conn_req
*
req
=
(
struct
l2cap_conn_req
*
)
data
;
struct
l2cap_conn_rsp
rsp
;
struct
sock
*
sk
,
*
parent
;
int
result
,
status
=
0
;
int
result
,
status
=
L2CAP_CS_NO_INFO
;
u16
dcid
=
0
,
scid
=
__le16_to_cpu
(
req
->
scid
);
__le16
psm
=
req
->
psm
;
__le16
psm
=
req
->
psm
;
BT_DBG
(
"psm 0x%2.2x scid 0x%4.4x"
,
psm
,
scid
);
...
...
@@ -1567,6 +1582,13 @@ static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hd
goto
sendresp
;
}
/* Check if the ACL is secure enough (if not SDP) */
if
(
psm
!=
cpu_to_le16
(
0x0001
)
&&
!
hci_conn_check_link_mode
(
conn
->
hcon
))
{
result
=
L2CAP_CR_SEC_BLOCK
;
goto
response
;
}
result
=
L2CAP_CR_NO_MEM
;
/* Check for backlog size */
...
...
@@ -2224,7 +2246,7 @@ static int l2cap_auth_cfm(struct hci_conn *hcon, u8 status)
rsp
.
scid
=
cpu_to_le16
(
l2cap_pi
(
sk
)
->
dcid
);
rsp
.
dcid
=
cpu_to_le16
(
l2cap_pi
(
sk
)
->
scid
);
rsp
.
result
=
cpu_to_le16
(
result
);
rsp
.
status
=
cpu_to_le16
(
0
);
rsp
.
status
=
cpu_to_le16
(
L2CAP_CS_NO_INFO
);
l2cap_send_cmd
(
conn
,
l2cap_pi
(
sk
)
->
ident
,
L2CAP_CONN_RSP
,
sizeof
(
rsp
),
&
rsp
);
}
...
...
@@ -2296,7 +2318,7 @@ static int l2cap_encrypt_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
rsp
.
scid
=
cpu_to_le16
(
l2cap_pi
(
sk
)
->
dcid
);
rsp
.
dcid
=
cpu_to_le16
(
l2cap_pi
(
sk
)
->
scid
);
rsp
.
result
=
cpu_to_le16
(
result
);
rsp
.
status
=
cpu_to_le16
(
0
);
rsp
.
status
=
cpu_to_le16
(
L2CAP_CS_NO_INFO
);
l2cap_send_cmd
(
conn
,
l2cap_pi
(
sk
)
->
ident
,
L2CAP_CONN_RSP
,
sizeof
(
rsp
),
&
rsp
);
}
...
...
net/bluetooth/sco.c
View file @
47abf28d
...
...
@@ -200,7 +200,7 @@ static int sco_connect(struct sock *sk)
else
type
=
SCO_LINK
;
hcon
=
hci_connect
(
hdev
,
type
,
dst
);
hcon
=
hci_connect
(
hdev
,
type
,
dst
,
HCI_AT_NO_BONDING
);
if
(
!
hcon
)
goto
done
;
...
...
net/ipv6/ip6_output.c
View file @
47abf28d
...
...
@@ -943,39 +943,39 @@ static int ip6_dst_lookup_tail(struct sock *sk,
}
#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
/*
* Here if the dst entry we've looked up
* has a neighbour entry that is in the INCOMPLETE
* state and the src address from the flow is
* marked as OPTIMISTIC, we release the found
* dst entry and replace it instead with the
* dst entry of the nexthop router
*/
if
(
!
((
*
dst
)
->
neighbour
->
nud_state
&
NUD_VALID
))
{
struct
inet6_ifaddr
*
ifp
;
struct
flowi
fl_gw
;
int
redirect
;
ifp
=
ipv6_get_ifaddr
(
net
,
&
fl
->
fl6_src
,
(
*
dst
)
->
dev
,
1
);
redirect
=
(
ifp
&&
ifp
->
flags
&
IFA_F_OPTIMISTIC
);
if
(
ifp
)
in6_ifa_put
(
ifp
);
if
(
redirect
)
{
/*
* We need to get the dst entry for the
* default router instead
*/
dst_release
(
*
dst
);
memcpy
(
&
fl_gw
,
fl
,
sizeof
(
struct
flowi
));
memset
(
&
fl_gw
.
fl6_dst
,
0
,
sizeof
(
struct
in6_addr
));
*
dst
=
ip6_route_output
(
net
,
sk
,
&
fl_gw
);
if
((
err
=
(
*
dst
)
->
error
))
goto
out_err_release
;
}
/*
* Here if the dst entry we've looked up
* has a neighbour entry that is in the INCOMPLETE
* state and the src address from the flow is
* marked as OPTIMISTIC, we release the found
* dst entry and replace it instead with the
* dst entry of the nexthop router
*/
if
((
*
dst
)
->
neighbour
&&
!
((
*
dst
)
->
neighbour
->
nud_state
&
NUD_VALID
))
{
struct
inet6_ifaddr
*
ifp
;
struct
flowi
fl_gw
;
int
redirect
;
ifp
=
ipv6_get_ifaddr
(
net
,
&
fl
->
fl6_src
,
(
*
dst
)
->
dev
,
1
);
redirect
=
(
ifp
&&
ifp
->
flags
&
IFA_F_OPTIMISTIC
);
if
(
ifp
)
in6_ifa_put
(
ifp
);
if
(
redirect
)
{
/*
* We need to get the dst entry for the
* default router instead
*/
dst_release
(
*
dst
);
memcpy
(
&
fl_gw
,
fl
,
sizeof
(
struct
flowi
));
memset
(
&
fl_gw
.
fl6_dst
,
0
,
sizeof
(
struct
in6_addr
));
*
dst
=
ip6_route_output
(
net
,
sk
,
&
fl_gw
);
if
((
err
=
(
*
dst
)
->
error
))
goto
out_err_release
;
}
}
#endif
return
0
;
...
...
net/xfrm/xfrm_policy.c
View file @
47abf28d
...
...
@@ -1077,6 +1077,7 @@ static void __xfrm_policy_link(struct xfrm_policy *pol, int dir)
struct
hlist_head
*
chain
=
policy_hash_bysel
(
&
pol
->
selector
,
pol
->
family
,
dir
);
list_add_tail
(
&
pol
->
bytype
,
&
xfrm_policy_bytype
[
pol
->
type
]);
hlist_add_head
(
&
pol
->
bydst
,
chain
);
hlist_add_head
(
&
pol
->
byidx
,
xfrm_policy_byidx
+
idx_hash
(
pol
->
index
));
xfrm_policy_count
[
dir
]
++
;
...
...
net/xfrm/xfrm_state.c
View file @
47abf28d
...
...
@@ -858,6 +858,7 @@ xfrm_state_find(xfrm_address_t *daddr, xfrm_address_t *saddr,
if
(
km_query
(
x
,
tmpl
,
pol
)
==
0
)
{
x
->
km
.
state
=
XFRM_STATE_ACQ
;
list_add_tail
(
&
x
->
all
,
&
xfrm_state_all
);
hlist_add_head
(
&
x
->
bydst
,
xfrm_state_bydst
+
h
);
h
=
xfrm_src_hash
(
daddr
,
saddr
,
family
);
hlist_add_head
(
&
x
->
bysrc
,
xfrm_state_bysrc
+
h
);
...
...
@@ -1055,6 +1056,7 @@ static struct xfrm_state *__find_acq_core(unsigned short family, u8 mode, u32 re
xfrm_state_hold
(
x
);
x
->
timer
.
expires
=
jiffies
+
sysctl_xfrm_acq_expires
*
HZ
;
add_timer
(
&
x
->
timer
);
list_add_tail
(
&
x
->
all
,
&
xfrm_state_all
);
hlist_add_head
(
&
x
->
bydst
,
xfrm_state_bydst
+
h
);
h
=
xfrm_src_hash
(
daddr
,
saddr
,
family
);
hlist_add_head
(
&
x
->
bysrc
,
xfrm_state_bysrc
+
h
);
...
...
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