Page MenuHomeFreeBSD

D60338.diff
No OneTemporary

D60338.diff

Index: sys/dev/mpi3mr/mpi3mr.c
===================================================================
--- sys/dev/mpi3mr/mpi3mr.c
+++ sys/dev/mpi3mr/mpi3mr.c
@@ -241,24 +241,33 @@
return;
}
-static void * mpi3mr_get_reply_virt_addr(struct mpi3mr_softc *sc,
+static void *mpi3mr_get_reply_virt_addr(struct mpi3mr_softc *sc,
bus_addr_t phys_addr)
{
if (!phys_addr)
- return NULL;
+ return (NULL);
if ((phys_addr < sc->reply_buf_dma_min_address) ||
- (phys_addr > sc->reply_buf_dma_max_address))
- return NULL;
+ ((phys_addr + sc->reply_sz) > sc->reply_buf_dma_max_address) ||
+ ((phys_addr - sc->reply_buf_phys) % sc->reply_sz))
+ return (NULL);
- return sc->reply_buf + (phys_addr - sc->reply_buf_phys);
+ return (sc->reply_buf + (phys_addr - sc->reply_buf_phys));
}
-static void * mpi3mr_get_sensebuf_virt_addr(struct mpi3mr_softc *sc,
+static void *mpi3mr_get_sensebuf_virt_addr(struct mpi3mr_softc *sc,
bus_addr_t phys_addr)
{
+ bus_addr_t sense_pool_end;
+
if (!phys_addr)
- return NULL;
- return sc->sense_buf + (phys_addr - sc->sense_buf_phys);
+ return (NULL);
+ sense_pool_end = sc->sense_buf_phys +
+ ((bus_addr_t)sc->num_sense_bufs * MPI3MR_SENSEBUF_SZ);
+ if ((phys_addr < sc->sense_buf_phys) ||
+ (phys_addr + MPI3MR_SENSEBUF_SZ > sense_pool_end) ||
+ ((phys_addr - sc->sense_buf_phys) % MPI3MR_SENSEBUF_SZ))
+ return (NULL);
+ return (sc->sense_buf + (phys_addr - sc->sense_buf_phys));
}
static void mpi3mr_repost_reply_buf(struct mpi3mr_softc *sc,

File Metadata

Mime Type
text/plain
Expires
Wed, Oct 7, 11:06 PM (10 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40342577
Default Alt Text
D60338.diff (1 KB)

Event Timeline