Skip to content

Commit 64536ab

Browse files
committed
habanalabs: block scalar load_and_exe on external queue
In Gaudi, the user can't execute scalar load_and_exe on external queue because it can be a security hole. The driver doesn't parse the commands being loaded and it can be msg_prot, which the user isn't allowed to use. Reviewed-by: Tomer Tayar <[email protected]> Signed-off-by: Oded Gabbay <[email protected]>
1 parent 8c289ea commit 64536ab

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

drivers/misc/habanalabs/gaudi/gaudi.c

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3790,6 +3790,25 @@ static int gaudi_validate_dma_pkt_no_mmu(struct hl_device *hdev,
37903790
src_in_host);
37913791
}
37923792

3793+
static int gaudi_validate_load_and_exe_pkt(struct hl_device *hdev,
3794+
struct hl_cs_parser *parser,
3795+
struct packet_load_and_exe *user_pkt)
3796+
{
3797+
u32 cfg;
3798+
3799+
cfg = le32_to_cpu(user_pkt->cfg);
3800+
3801+
if (cfg & GAUDI_PKT_LOAD_AND_EXE_CFG_DST_MASK) {
3802+
dev_err(hdev->dev,
3803+
"User not allowed to use Load and Execute\n");
3804+
return -EPERM;
3805+
}
3806+
3807+
parser->patched_cb_size += sizeof(struct packet_load_and_exe);
3808+
3809+
return 0;
3810+
}
3811+
37933812
static int gaudi_validate_cb(struct hl_device *hdev,
37943813
struct hl_cs_parser *parser, bool is_mmu)
37953814
{
@@ -3838,6 +3857,11 @@ static int gaudi_validate_cb(struct hl_device *hdev,
38383857
rc = -EPERM;
38393858
break;
38403859

3860+
case PACKET_LOAD_AND_EXE:
3861+
rc = gaudi_validate_load_and_exe_pkt(hdev, parser,
3862+
(struct packet_load_and_exe *) user_pkt);
3863+
break;
3864+
38413865
case PACKET_LIN_DMA:
38423866
parser->contains_dma_pkt = true;
38433867
if (is_mmu)
@@ -3855,7 +3879,6 @@ static int gaudi_validate_cb(struct hl_device *hdev,
38553879
case PACKET_FENCE:
38563880
case PACKET_NOP:
38573881
case PACKET_ARB_POINT:
3858-
case PACKET_LOAD_AND_EXE:
38593882
parser->patched_cb_size += pkt_size;
38603883
break;
38613884

drivers/misc/habanalabs/include/gaudi/gaudi_packets.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,9 @@ struct packet_wait {
197197
__le32 ctl;
198198
};
199199

200+
#define GAUDI_PKT_LOAD_AND_EXE_CFG_DST_SHIFT 0
201+
#define GAUDI_PKT_LOAD_AND_EXE_CFG_DST_MASK 0x00000001
202+
200203
struct packet_load_and_exe {
201204
__le32 cfg;
202205
__le32 ctl;

0 commit comments

Comments
 (0)