klamer@mi.eltn.utwente.nl (Klamer Schutte) (04/08/91)
As i already announced in an earlier message, there is a bug in kernel/stfloppy.c which produces a kernel panic. The bug is that there is divided through a possible-zero number. The fix is to check for this and give a proper error. (return EINVAL). Fix is relative to minix 1.5.10#3. Don't apply it to plain 1.5.10. Don't think about 1.1 ;-) Both plaintext and uud version follow. Klamer echo x - stfloppy.c.cdi sed '/^X/s///' > stfloppy.c.cdi << '/' X*** 1.1 1991/04/08 10:37:42 X--- stfloppy.c 1991/04/08 11:06:14 X*************** X*** 538,552 **** X if (ret != SECTOR_SIZE) X return(ret); X nr_sec[d] = sh88tosh68(block0.b0_spt); X- nr_cyl[d] = sh88tosh68(block0.b0_nsects) / nr_sec[d]; X nr_hds[d] = sh88tosh68(block0.b0_nsides); X /* safety first: check for plausible values */ X /* assume that #sectors is between 8 (old dos) and 18 (hd diskettes) */ X if ((nr_sec[d] < 8) || (nr_sec[d] > 18)) return(EINVAL); X- /* assume that #cylinders is either 40 (5 1/4" dos) or between 78 and 85 */ X- if ((nr_cyl[d] != 40) && (nr_cyl[d] < 78) || (nr_cyl[d] > 85)) return(EINVAL); X /* definitely must have either one or two heads */ X if ((nr_hds[d] != 1) && (nr_hds[d] != 2)) return(EINVAL); X return(0); X } X #endif X--- 538,553 ---- X if (ret != SECTOR_SIZE) X return(ret); X nr_sec[d] = sh88tosh68(block0.b0_spt); X nr_hds[d] = sh88tosh68(block0.b0_nsides); X /* safety first: check for plausible values */ X /* assume that #sectors is between 8 (old dos) and 18 (hd diskettes) */ X if ((nr_sec[d] < 8) || (nr_sec[d] > 18)) return(EINVAL); X /* definitely must have either one or two heads */ X if ((nr_hds[d] != 1) && (nr_hds[d] != 2)) return(EINVAL); X+ /* now is know that nr_sec and nr_hds are not zero there can de divided */ X+ nr_cyl[d] = sh88tosh68(block0.b0_nsects) / (nr_sec[d]*nr_hds[d]); X+ /* assume that #cylinders is either 40 (5 1/4" dos) or between 78 and 85 */ X+ if ((nr_cyl[d] != 40) && (nr_cyl[d] < 78) || (nr_cyl[d] > 85)) return(EINVAL); X return(0); X } X #endif / echo x - stfloppy.uue sed '/^X/s///' > stfloppy.uue << '/' Xtable X !"#$%&'()*+,-./0123456789:;<=>? X@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ Xbegin 644 stfloppy.c.cdi.Z XM'YV-*@*"B.$B1H(8.7+$> &#!D,< V'HF'%#!PT9"EIH!#&'CADV;^# R>-Bz XMS,&$"QL^'!A#!PP;.F+04!"PILV;*F@*K#$#!XL:-62 L*D A%$0:<R 0"&Gy XM#!T0(7J F%)D")4G4KY,2:*E2(JB1Q,TI5-'CANF3E/L &O4C9PO<\J,V4*Fx XM"PBI<]#@P$'G35X;.%"( 3EF#0P78F# A4-';<:C;K^,R<.&KEV\>OGZ10-8w XM,&'#B!6[B3N&SIP4(%Z B$S:\MJCJ]^B(3/'\EV.F?O^#3SX3>'#B;^,3D.Fv XMS.G71U^HX!C&C-,\(,RDD=-1!X@Q:.2NB?Y&#@@X;,+4F9-F<!D0=L*PJ6-\u XMZ NVJ9>'F3.G3IOS=-"$>3J"=%_J2,T!@AA.W5%&&6Z !$*;[!!!@AD^(5:t XM&&X\&,."LT&8QAQK.$6'<:BI\!YL22V% FMRV<:#@JCQP<=2*,Y5%P@^#(1#s XM"JB-5=99123AA!5!,.%8"\G)1Y]]^.G'WV1LI%%A&0!N"$(9:>0')0@TP+!4r XM#0.]0(,($$H(0G<#%GA@@C= 1.&#.' IXF-&E8C"B6\Q:5M46,* F@DFP%@Gq XM92J"D&:++](I&: SUM@FCB#H:!8*/?X8I&.P*0=A&=*Y4649;$#7QGA/Z6?'p XM>51:Z=T;;IQ')AUWO %"=F'0YAY\<AHZ6VTSXAG#GGW:2MN=4LG J*,\^@BDo XMD,@912P*>B+7!U@C($A&4AEMQ)-/0,T @D8:T:H46D_A29556&G%E5?PB>74n XMCN!2"ME;K<V(V5ZZ<<;;9\ I-@=C[K8EVZ_RXD;O9IWU]EMHPI%7W''P63I'm XM<\]%-UUUUV57&'?>@2<>>>:AIQY[ KY9J9'UW0="?ON!T)]<_PDH)8&LGJG@l XM4@T^&.%I(*QIXU(93LNAAR#.2N*WAL9KUXHW@N"BGW"EF*B-PZ[[:*3']AO?k XMI9ENVBD(GW;T:ABC3EEE=J>F.J9WK+H*JZPB'U5K9+<".Q"O3,>=:[!1DS6Uj XML9.NM4*1J[UQ1X @K.&&X"<K&5O38^1<X>*WYMQ4X$_I :6KIIXW!H67:F@'i XM<64\^.;?_AY:6<!Y#;R;9[Z!%MQH+..L6M%.=Z$"W !WX1CI5\]7<I(IC\"Dh XMD\5%*6"I9.>Y99=?AHDSF3 ;B*"@:C[>YJR\O_WGZ7;AF27=AMHYXXJ#*EUHg X79.+;I6@->;-+==_P+=LL6,\:%6V%U +>f X e Xend / -- Klamer Schutte Faculty of electrical engineering -- University of Twente, The Netherlands klamer@mi.eltn.utwente.nl {backbone}!mcsun!mi.eltn.utwente.nl!klamer