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]
Date:	Tue, 11 Mar 2008 02:16:08 +0100 (CET)
From:	Stefan Richter <stefanr@...6.in-berlin.de>
To:	linux1394-devel@...ts.sourceforge.net
cc:	linux-kernel@...r.kernel.org
Subject: [PATCH] firewire: fw-ohci: untangle a mixed unsigned/signed
 expression

My old C textbook says that the result of casting an unsigned to signed
is undefined if the former's value can't be represented in the latter's
type.  Maybe that book is too old...?

Anyway, this change makes it more explicit what is going on, i.e. that
p.ack is meant to become negative on some occasions.  (p.ack is an int.)
fw-ohci.s does actually not change due to 1st and 2nd hunk of this patch
(with gcc 4.1.2 i686 -O2).

The 3rd hunk makes an expression more readable.

Signed-off-by: Stefan Richter <stefanr@...6.in-berlin.de>
---

applies after patch "firewire: debug AT, AR, and selfID-complete events"

 drivers/firewire/fw-ohci.c |    8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

Index: linux/drivers/firewire/fw-ohci.c
===================================================================
--- linux.orig/drivers/firewire/fw-ohci.c
+++ linux/drivers/firewire/fw-ohci.c
@@ -421,6 +421,7 @@ static __le32 *handle_ar_packet(struct a
 	struct fw_ohci *ohci = ctx->ohci;
 	struct fw_packet p;
 	u32 status, length, tcode;
+	int evt;
 
 	p.header[0] = cond_le32_to_cpu(buffer[0]);
 	p.header[1] = cond_le32_to_cpu(buffer[1]);
@@ -464,13 +465,14 @@ static __le32 *handle_ar_packet(struct a
 	length = (p.header_length + p.payload_length + 3) / 4;
 	status = cond_le32_to_cpu(buffer[length]);
 
-	p.ack        = ((status >> 16) & 0x1f) - 16;
+	evt          = (status >> 16) & 0x1f;
+	p.ack        = evt - 16;
 	p.speed      = (status >> 21) & 0x7;
 	p.timestamp  = status & 0xffff;
 	p.generation = ohci->request_generation;
 
 	if (unlikely(param_debug & OHCI_PARAM_DEBUG_AT_AR))
-		debug_ar_at_event('R', p.speed, p.header, status >> 16 & 0x1f);
+		debug_ar_at_event('R', p.speed, p.header, evt);
 
 	/*
 	 * The OHCI bus reset handler synthesizes a phy packet with
@@ -482,7 +484,7 @@ static __le32 *handle_ar_packet(struct a
 	 * request.
 	 */
 
-	if (p.ack + 16 == 0x09)
+	if (evt == OHCI1394_evt_bus_reset)
 		ohci->request_generation = (p.header[2] >> 16) & 0xff;
 	else if (ctx == &ohci->ar_request_ctx)
 		fw_core_handle_request(&ohci->card, &p);

-- 
Stefan Richter
-=====-==--- --== -=-==
http://arcgraph.de/sr/


--
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