Re: [PATCH] Bluetooth: l2cap: Check encryption key size on incoming connection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Frédéric,

On Tue, Apr 8, 2025 at 1:28 PM Luiz Augusto von Dentz
<luiz.dentz@xxxxxxxxx> wrote:
>
> Hi Frédéric,
>
> On Tue, Apr 8, 2025 at 1:09 PM Frédéric Danis
> <frederic.danis@xxxxxxxxxxxxx> wrote:
> >
> > This is required for passing GAP/SEC/SEM/BI-04-C PTS test case:
> >   Security Mode 4 Level 4, Responder - Invalid Encryption Key Size
> >   - 128 bit
> >
> > This tests the security key with size from 1 to 15 bytes while the
> > Security Mode 4 Level 4 requests 16 bytes key size.
> >
> > Currently PTS fails with the following logs:
> > - expected:Connection Response:
> >     Code: [3 (0x03)] Code
> >     Identifier: (lt)WildCard: Exists(gt)
> >     Length: [8 (0x0008)]
> >     Destination CID: (lt)WildCard: Exists(gt)
> >     Source CID: [64 (0x0040)]
> >     Result: [3 (0x0003)] Connection refused - Security block
> >     Status: (lt)WildCard: Exists(gt),
> > but received:Connection Response:
> >     Code: [3 (0x03)] Code
> >     Identifier: [1 (0x01)]
> >     Length: [8 (0x0008)]
> >     Destination CID: [64 (0x0040)]
> >     Source CID: [64 (0x0040)]
> >     Result: [0 (0x0000)] Connection Successful
> >     Status: [0 (0x0000)] No further information available
> >
> > And HCI logs:
> > < HCI Command: Read Encrypti.. (0x05|0x0008) plen 2
> >         Handle: 14 Address: 00:1B:DC:F2:24:10 (Vencer Co., Ltd.)
> > > HCI Event: Command Complete (0x0e) plen 7
> >       Read Encryption Key Size (0x05|0x0008) ncmd 1
> >         Status: Success (0x00)
> >         Handle: 14 Address: 00:1B:DC:F2:24:10 (Vencer Co., Ltd.)
> >         Key size: 7
> > > ACL Data RX: Handle 14 flags 0x02 dlen 12
> >       L2CAP: Connection Request (0x02) ident 1 len 4
> >         PSM: 4097 (0x1001)
> >         Source CID: 64
> > < ACL Data TX: Handle 14 flags 0x00 dlen 16
> >       L2CAP: Connection Response (0x03) ident 1 len 8
> >         Destination CID: 64
> >         Source CID: 64
> >         Result: Connection successful (0x0000)
> >         Status: No further information available (0x0000)
> >
> > Signed-off-by: Frédéric Danis <frederic.danis@xxxxxxxxxxxxx>
> > ---
> >  net/bluetooth/l2cap_core.c | 7 +++++++
> >  1 file changed, 7 insertions(+)
> >
> > diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
> > index c7b66b2ea9f2..f2ab09582146 100644
> > --- a/net/bluetooth/l2cap_core.c
> > +++ b/net/bluetooth/l2cap_core.c
> > @@ -3997,6 +3997,13 @@ static void l2cap_connect(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd,
> >                 goto response;
> >         }
> >
> > +       /* Check the encryption key size */
> > +       if (!l2cap_check_enc_key_size(conn->hcon)) {
> > +               conn->disc_reason = HCI_ERROR_AUTH_FAILURE;
> > +               result = L2CAP_CR_SEC_BLOCK;
> > +               goto response;
> > +       }
> > +
>
> Hmm maybe we should incorporate this is the statement before:
>
>     /* Check if the ACL is secure enough (if not SDP) */
>     if (psm != cpu_to_le16(L2CAP_PSM_SDP) &&
>         !hci_conn_check_link_mode(conn->hcon)) {
>         conn->disc_reason = HCI_ERROR_AUTH_FAILURE;
>         result = L2CAP_CR_SEC_BLOCK;
>         goto response;
>     }
>
> That said I don't quite understand why the likes of
> hci_conn_check_link_mode is not checking the key size since it is
> already doing security level checks, either way that indeed seem to be
> missing for incoming connection requests.

Also this need to add Fixes: 288c06973daa ("Bluetooth: Enforce key
size of 16 bytes on FIPS level") since apparently tha missed some code
paths.

> >         result = L2CAP_CR_NO_MEM;
> >
> >         /* Check for valid dynamic CID range (as per Erratum 3253) */
> > --
> > 2.43.0
> >
> >
>
>
> --
> Luiz Augusto von Dentz



-- 
Luiz Augusto von Dentz





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux