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>] [day] [month] [year] [list]
Date:	Fri, 14 May 2010 11:10:56 +0200
From:	Manfred Spraul <manfred@...orfullife.com>
To:	LKML <linux-kernel@...r.kernel.org>,
	Andrew Morton <akpm@...ux-foundation.org>
Cc:	Chris Mason <chris.mason@...cle.com>,
	Zach Brown <zach.brown@...cle.com>,
	Jens Axboe <jens.axboe@...cle.com>,
	Nick Piggin <npiggin@...e.de>,
	Manfred Spraul <manfred@...orfullife.com>
Subject: [PATCH] ipc/sem.c: Bugfix for incorrect setting of sem_otime

The attached patch corrects a bug that I've introduced with the previous
patch series:
sem_otime is the time of the last successful semop() call.

Andrew, could you add it into your -mm tree?
It is on top of the path that fixes the missing initialization.

Signed-off-by: Manfred Spraul <manfred@...orfullife.com>
---
 ipc/sem.c |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/ipc/sem.c b/ipc/sem.c
index 58dbbf7..a744eb5 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -534,7 +534,7 @@ static int check_restart(struct sem_array *sma, struct sem_queue *q)
  * must be set to -1.
  * The tasks that must be woken up are added to @pt. The return code
  * is stored in q->pid.
- * The function return 1 if at least one array variable was modified.
+ * The function return 1 if at least one semop was completed successfully.
  */
 static int update_queue(struct sem_array *sma, int semnum, struct list_head *pt)
 {
@@ -542,7 +542,7 @@ static int update_queue(struct sem_array *sma, int semnum, struct list_head *pt)
 	struct list_head *walk;
 	struct list_head *pending_list;
 	int offset;
-	int retval = 0;
+	int semop_completed = 0;
 
 	/* if there are complex operations around, then knowing the semaphore
 	 * that was modified doesn't help us. Assume that multiple semaphores
@@ -586,19 +586,19 @@ again:
 			continue;
 
 		unlink_queue(sma, q);
-		if (q->alter)
-			retval = 1;
 
-		if (error)
+		if (error) {
 			restart = 0;
-		else
+		} else {
+			semop_completed = 1;
 			restart = check_restart(sma, q);
+		}
 
 		wake_up_sem_queue_prepare(pt, q, error);
 		if (restart)
 			goto again;
 	}
-	return retval;
+	return semop_completed;
 }
 
 /**
-- 
1.6.6.1

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