lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20060925145937.GJ29920@ftp.linux.org.uk>
Date:	Mon, 25 Sep 2006 15:59:37 +0100
From:	Al Viro <viro@....linux.org.uk>
To:	Douglas Gilbert <dougg@...que.net>
Cc:	linux-scsi@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] fix idiocy in asd_init_lseq_mdp()

> Several of us have reported a degenerate mode, that
> I term as "tmf timeout", in which a aic94xx based card
> becomes inoperable. Alas, the same hardware running another
> OS does not exhibit that problem (or at least not as much).

> >  	asd_write_reg_word(asd_ha, LmSEQ_INTEN_SAVE(lseq),
> > -			    (u16) LmM0INTEN_MASK & 0xFFFF0000 >> 16);
> > +			    (u16) ((LmM0INTEN_MASK & 0xFFFF0000) >> 16));
> >  	asd_write_reg_word(asd_ha, LmSEQ_INTEN_SAVE(lseq) + 2,
> >  			    (u16) LmM0INTEN_MASK & 0xFFFF);
> >  	asd_write_reg_byte(asd_ha, LmSEQ_LINK_RST_FRM_LEN(lseq), 0);
 
> BTW Luben was pointing out that the call you patched
> and the following call can be combined into a less
> trouble prone asd_write_reg_dword() call.

In that case there's another bug - we should write upper 16 bits to
addr + 2, not the lower ones.

IOW, the old code was
	broken attempt to write upper 16 bits to addr (ends up writing _lower_
16 bits)
	writing lower 16 bits to addr + 2

With this patch we get the first call do what it clearly intended to do
(unless it's a deliberate obfuscation from hell).  _IF_ we really want
to write the damn thing little-endian, the order should be reverted on
top of that.  I.e.
  	asd_write_reg_word(asd_ha, LmSEQ_INTEN_SAVE(lseq),
  			    (u16) LmM0INTEN_MASK & 0xFFFF);
  	asd_write_reg_word(asd_ha, LmSEQ_INTEN_SAVE(lseq) + 2,
			    (u16) ((LmM0INTEN_MASK & 0xFFFF0000) >> 16));
or, indeed, asd_write_reg_dword().
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ