mirror of
https://github.com/torvalds/linux
synced 2024-10-03 18:00:50 +00:00
c389377c01
When we are translating channel data addresses from guest to host address space for TIC instructions we are getting incorrect addresses because of a pointer arithmetic error. We currently calculate the offset of the TIC's cda from the start of the channel program chain (ccw->cda - ccw_head). We then add that to the address of the ccw chain in host memory (iter->ch_ccw). The problem is that iter->ch_ccw is a pointer to struct ccw1 so when we increment it we are actually incrementing by the size of struct ccw1 which is 8 bytes. The intent was to increment by n-bytes, not n*8. The fix: cast iter->ch_ccw to char* so it will be incremented by n*1. Reviewed-by: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> Signed-off-by: Jason J. Herne <jjherne@linux.vnet.ibm.com> Signed-off-by: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> Message-Id: <20170721011436.76112-1-bjsdjshi@linux.vnet.ibm.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com> |
||
---|---|---|
.. | ||
airq.c | ||
blacklist.c | ||
blacklist.h | ||
ccwgroup.c | ||
ccwreq.c | ||
chp.c | ||
chp.h | ||
chsc.c | ||
chsc.h | ||
chsc_sch.c | ||
chsc_sch.h | ||
cio.c | ||
cio.h | ||
cio_debug.h | ||
cmf.c | ||
crw.c | ||
css.c | ||
css.h | ||
device.c | ||
device.h | ||
device_fsm.c | ||
device_id.c | ||
device_ops.c | ||
device_pgid.c | ||
device_status.c | ||
eadm_sch.c | ||
eadm_sch.h | ||
fcx.c | ||
idset.c | ||
idset.h | ||
io_sch.h | ||
ioasm.c | ||
ioasm.h | ||
isc.c | ||
itcw.c | ||
Makefile | ||
orb.h | ||
qdio.h | ||
qdio_debug.c | ||
qdio_debug.h | ||
qdio_main.c | ||
qdio_setup.c | ||
qdio_thinint.c | ||
scm.c | ||
trace.c | ||
trace.h | ||
vfio_ccw_cp.c | ||
vfio_ccw_cp.h | ||
vfio_ccw_drv.c | ||
vfio_ccw_fsm.c | ||
vfio_ccw_ops.c | ||
vfio_ccw_private.h |