sysinstall dead in -CURRENT?

Ballance, Robert T tyler at neo.tamu.edu
Mon Dec 20 22:43:22 PST 2004


> AFAIK, this has nothing to do with marius' zs(4) patch.
> There is also PR72962 for the issue.
> 
> Long ago, I made a patch for this issue. But it wasn't further
> investigated due to lack of time. I sent a mail to one of
> developer but got no reply. The following is the summary of
> the mail.
> 
> It seems that it happans on on systems with SCSI CDROM. In rev.
> 1.90 of scsi_cd.c, phk changed to return 2k sectors when no media
> inserted. But open_disk.c:Int_Open_Disk() just check sectorsize
> against 0. So if we have no media in CDROM, we would bypass the
> check and could generate division by zero exception. I guess we
> need at least the following patch.
> 
> It seems that there are two cases here.
> 1. No media in CDROM -> sector = 2k, hd = 0
> 2. media present in CDROM -> sector = 0, hd = 0
> 
> --- open_disk.c.orig	Mon Sep 20 11:22:10 2004
> +++ open_disk.c	Tue Oct 26 17:45:17 2004
> @@ -94,6 +94,8 @@
>  		return (NULL);
>  	d->sector_size = s;
>  	len /= s;	/* media size in number of sectors. */
> +	if (len == 0)
> +		return (NULL);
>  
>  	if (Add_Chunk(d, 0, len, name, whole, 0, 0, "-")) {
>  		DPRINT(("Failed to add 'whole' chunk"));
> @@ -123,6 +125,10 @@
>  	 */
>  	o = d->bios_hd * d->bios_sect;
>  	d->bios_cyl = (o != 0) ? len / o : 0;
> +	if (d->bios_cyl == 0) {
> +		/* XXX This may indicate it is not DISK. */
> +		return (NULL);
> +	}
>  
>  	p = q;
>  	lo[0] = 0;
> 
> And another one to plug memory leak.
> 
> --- disk.c.orig	Mon May 17 07:08:16 2004
> +++ disk.c	Tue Oct 26 16:46:23 2004
> @@ -77,6 +77,7 @@
>  struct disk *
>  Open_Disk(const char *name)
>  {
> +	struct disk *d;
>  	char *conftxt;
>  	size_t txtsize;
>  	int error;
> @@ -99,7 +100,10 @@
>  	}
>  	conftxt[txtsize] = '';	/* in case kernel bug is still there */
>  
> -	return Int_Open_Disk(name, conftxt);
> +	d = Int_Open_Disk(name, conftxt);
> +	free(conftxt);
> +
> +	return (d);
>  }
>  
>  void
> 
> BTW, I don't know why GEOM thinks SCSI CDROM as a disk. On systems
> with IDE CDROM, it is not considered as a disk. So above problem
> only happen on systems with SCSI CDROM. With above patches my U2
> displayed install screen successfully with/without CD mdia in CDROM.

Is there anything I can do to help get this into the tree/working, and does this problem affect SCSI 
cdrom's across the board,  or just with sparc64?

I'm off for a good while from University, and I got access today to another Ultra2 and an Ultra60, so I 
can test more stuff if needed ;)

-R. Tyler Ballance




More information about the freebsd-sparc64 mailing list