View | Details | Raw Unified | Return to bug 212139 | Differences between
and this patch

Collapse All | Expand All

(-)i386/libi386/biosdisk.c (-8 / +8 lines)
Lines 511-531 Link Here
511
    DEBUG("open_disk %p", dev);
511
    DEBUG("open_disk %p", dev);
512
    blks = size / BD(dev).bd_sectorsize;
512
    blks = size / BD(dev).bd_sectorsize;
513
    if (rsize)
513
    if (rsize)
514
	*rsize = 0;
514
	*rsize = 0;
515
515
516
    if (dblk >= BD(dev).bd_sectors) {
516
#define clip(x) ((x) & 0xffffffff)
517
	DEBUG("IO past disk end %llu", (unsigned long long)dblk);
517
    if (clip(dblk + blks) > clip(BD(dev).bd_sectors)) {
518
	return (EIO);
518
	/*
519
    }
519
	 * perform partial read to prevent readahead crossing
520
520
	 * any 32 bit aliases of the end of disk.
521
    if (dblk + blks > BD(dev).bd_sectors) {
521
	 */
522
	/* perform partial read */
522
	blks = clip(BD(dev).bd_sectors) - clip(dblk);
523
	blks = BD(dev).bd_sectors - dblk;
524
	size = blks * BD(dev).bd_sectorsize;
523
	size = blks * BD(dev).bd_sectorsize;
525
	DEBUG("short read %d", blks);
524
	DEBUG("short read %d", blks);
526
    }
525
    }
526
#undef clip
527
527
528
    switch(rw){
528
    switch(rw){
529
    case F_READ:
529
    case F_READ:
530
	DEBUG("read %d from %lld to %p", blks, dblk, buf);
530
	DEBUG("read %d from %lld to %p", blks, dblk, buf);
531
531

Return to bug 212139