#define BNEPGETCONNINFO        _IOR('B', 211, int)
 #define BNEPGETSUPPFEAT        _IOR('B', 212, int)
 
+#define BNEP_SETUP_RESPONSE    0
+#define BNEP_SETUP_RSP_SENT    10
+
 struct bnep_connadd_req {
        int   sock;             /* Connected socket */
        __u32 flags;
 
                break;
 
        case BNEP_SETUP_CONN_REQ:
-               err = bnep_send_rsp(s, BNEP_SETUP_CONN_RSP, BNEP_CONN_NOT_ALLOWED);
+               /* Successful response should be sent only once */
+               if (test_bit(BNEP_SETUP_RESPONSE, &s->flags) &&
+                   !test_and_set_bit(BNEP_SETUP_RSP_SENT, &s->flags))
+                       err = bnep_send_rsp(s, BNEP_SETUP_CONN_RSP,
+                                           BNEP_SUCCESS);
+               else
+                       err = bnep_send_rsp(s, BNEP_SETUP_CONN_RSP,
+                                           BNEP_CONN_NOT_ALLOWED);
                break;
 
        default: {
 
 int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)
 {
-       u32 valid_flags = 0;
+       u32 valid_flags = BIT(BNEP_SETUP_RESPONSE);
        struct net_device *dev;
        struct bnep_session *s, *ss;
        u8 dst[ETH_ALEN], src[ETH_ALEN];
        s->sock  = sock;
        s->role  = req->role;
        s->state = BT_CONNECTED;
+       s->flags = req->flags;
 
        s->msg.msg_flags = MSG_NOSIGNAL;
 
 
 static void __bnep_copy_ci(struct bnep_conninfo *ci, struct bnep_session *s)
 {
-       u32 valid_flags = 0;
+       u32 valid_flags = BIT(BNEP_SETUP_RESPONSE);
 
        memset(ci, 0, sizeof(*ci));
        memcpy(ci->dst, s->eh.h_source, ETH_ALEN);