]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
RDMA/ionic: Fix kernel stack leak in ionic_create_cq()
authorJason Gunthorpe <jgg@nvidia.com>
Mon, 16 Feb 2026 15:02:50 +0000 (11:02 -0400)
committerLeon Romanovsky <leon@kernel.org>
Tue, 24 Feb 2026 10:03:15 +0000 (05:03 -0500)
struct ionic_cq_resp resp {
    __u32 cqid[2];         // offset 0 - PARTIALLY SET (see below)
    __u8  udma_mask;       // offset 8 - SET (resp.udma_mask = vcq->udma_mask)
    __u8  rsvd[7];         // offset 9 - NEVER SET <- LEAK
};

rsvd[7]: 7 bytes of stack memory leaked unconditionally.

cqid[2]: The loop at line 1256 iterates over udma_idx but skips indices
where !(vcq->udma_mask & BIT(udma_idx)). The array has 2 entries but
udma_count could be 1, meaning cqid[1] might never be written via
ionic_create_cq_common(). If udma_mask only has bit 0 set, cqid[1] (4
bytes) is also leaked. So potentially 11 bytes leaked.

Cc: stable@vger.kernel.org
Fixes: e8521822c733 ("RDMA/ionic: Register device ops for control path")
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Link: https://patch.msgid.link/4-v1-83e918d69e73+a9-rdma_udata_rc_jgg@nvidia.com
Acked-by: Abhijit Gangurde <abhijit.gangurde@amd.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/ionic/ionic_controlpath.c

index 5b3f40bd98d86d47b7331622e8053622fd6511e1..4842931f5316ee595c6623ed5d8941250c9e0a4d 100644 (file)
@@ -1218,7 +1218,7 @@ int ionic_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
                rdma_udata_to_drv_context(udata, struct ionic_ctx, ibctx);
        struct ionic_vcq *vcq = to_ionic_vcq(ibcq);
        struct ionic_tbl_buf buf = {};
-       struct ionic_cq_resp resp;
+       struct ionic_cq_resp resp = {};
        struct ionic_cq_req req;
        int udma_idx = 0, rc;