Zbigniew Jędrzejewski-Szmek 62fe94
From f901aaadd68050bc575c1c15b84f8f31fd4d494d Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 62fe94
From: Tom Gundersen <teg@jklm.no>
Zbigniew Jędrzejewski-Szmek 62fe94
Date: Thu, 18 Sep 2014 19:16:54 +0200
Zbigniew Jędrzejewski-Szmek 62fe94
Subject: [PATCH] udevadm: hwdb - check return value of fseeko()
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
Fonud by Coverity. Fixes CID #996255.
Zbigniew Jędrzejewski-Szmek 62fe94
---
Zbigniew Jędrzejewski-Szmek 62fe94
 src/udev/udevadm-hwdb.c | 14 ++++++++++++--
Zbigniew Jędrzejewski-Szmek 62fe94
 1 file changed, 12 insertions(+), 2 deletions(-)
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/udev/udevadm-hwdb.c b/src/udev/udevadm-hwdb.c
Zbigniew Jędrzejewski-Szmek 62fe94
index 65cbf61865..64273fbe8d 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/udev/udevadm-hwdb.c
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/udev/udevadm-hwdb.c
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -365,7 +365,12 @@ static int trie_store(struct trie *trie, const char *filename) {
Zbigniew Jędrzejewski-Szmek 62fe94
         fchmod(fileno(t.f), 0444);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         /* write nodes */
Zbigniew Jędrzejewski-Szmek 62fe94
-        fseeko(t.f, sizeof(struct trie_header_f), SEEK_SET);
Zbigniew Jędrzejewski-Szmek 62fe94
+        err = fseeko(t.f, sizeof(struct trie_header_f), SEEK_SET);
Zbigniew Jędrzejewski-Szmek 62fe94
+        if (err < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                fclose(t.f);
Zbigniew Jędrzejewski-Szmek 62fe94
+                unlink_noerrno(filename_tmp);
Zbigniew Jędrzejewski-Szmek 62fe94
+                return -errno;
Zbigniew Jędrzejewski-Szmek 62fe94
+        }
Zbigniew Jędrzejewski-Szmek 62fe94
         root_off = trie_store_nodes(&t, trie->root);
Zbigniew Jędrzejewski-Szmek 62fe94
         h.nodes_root_off = htole64(root_off);
Zbigniew Jędrzejewski-Szmek 62fe94
         pos = ftello(t.f);
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -378,7 +383,12 @@ static int trie_store(struct trie *trie, const char *filename) {
Zbigniew Jędrzejewski-Szmek 62fe94
         /* write header */
Zbigniew Jędrzejewski-Szmek 62fe94
         size = ftello(t.f);
Zbigniew Jędrzejewski-Szmek 62fe94
         h.file_size = htole64(size);
Zbigniew Jędrzejewski-Szmek 62fe94
-        fseeko(t.f, 0, SEEK_SET);
Zbigniew Jędrzejewski-Szmek 62fe94
+        err = fseeko(t.f, 0, SEEK_SET);
Zbigniew Jędrzejewski-Szmek 62fe94
+        if (err < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                fclose(t.f);
Zbigniew Jędrzejewski-Szmek 62fe94
+                unlink_noerrno(filename_tmp);
Zbigniew Jędrzejewski-Szmek 62fe94
+                return -errno;
Zbigniew Jędrzejewski-Szmek 62fe94
+        }
Zbigniew Jędrzejewski-Szmek 62fe94
         fwrite(&h, sizeof(struct trie_header_f), 1, t.f);
Zbigniew Jędrzejewski-Szmek 62fe94
         err = ferror(t.f);
Zbigniew Jędrzejewski-Szmek 62fe94
         if (err)