Blame SOURCES/0001-partitioning-Rename-crc32-to-efi_crc32-to-avoid-conf.patch

90d47e
From 8538ef6a2caabe2b261903859754af32e4239346 Mon Sep 17 00:00:00 2001
90d47e
From: "Richard W.M. Jones" <rjones@redhat.com>
90d47e
Date: Tue, 13 Nov 2018 10:54:06 +0000
90d47e
Subject: [PATCH] partitioning: Rename crc32 to efi_crc32 to avoid conflict
90d47e
 with zlib.
90d47e
90d47e
zlib exports a symbol called crc32, which is also the name of our
90d47e
EFI-specific CRC calculation function.  As a result if we link nbdkit
90d47e
or the plugin with zlib (even indirectly) then we may end up using the
90d47e
zlib symbol, which causes a segmentation fault.  Renaming our function
90d47e
avoids this.  I also renamed the source files to make the name less
90d47e
generic, since this function really only works for EFI CRCs, not for
90d47e
general CRCs.
90d47e
90d47e
This only affects RHEL 7.  I believe that's because Fedora uses a flag
90d47e
such as --as-needed or similar.
90d47e
90d47e
(cherry picked from commit fc789b9c3a9d0b6b4b0ae63a08ea34a70e0ea8db)
90d47e
---
90d47e
 plugins/partitioning/Makefile.am     |   4 +-
90d47e
 plugins/partitioning/crc32.c         | 140 -----------------------------------
90d47e
 plugins/partitioning/crc32.h         |  41 ----------
90d47e
 plugins/partitioning/efi-crc32.c     | 140 +++++++++++++++++++++++++++++++++++
90d47e
 plugins/partitioning/efi-crc32.h     |  41 ++++++++++
90d47e
 plugins/partitioning/partition-gpt.c |   6 +-
90d47e
 6 files changed, 186 insertions(+), 186 deletions(-)
90d47e
 delete mode 100644 plugins/partitioning/crc32.c
90d47e
 delete mode 100644 plugins/partitioning/crc32.h
90d47e
 create mode 100644 plugins/partitioning/efi-crc32.c
90d47e
 create mode 100644 plugins/partitioning/efi-crc32.h
90d47e
90d47e
diff --git a/plugins/partitioning/Makefile.am b/plugins/partitioning/Makefile.am
90d47e
index bc768be..8519bda 100644
90d47e
--- a/plugins/partitioning/Makefile.am
90d47e
+++ b/plugins/partitioning/Makefile.am
90d47e
@@ -37,8 +37,8 @@ EXTRA_DIST = nbdkit-partitioning-plugin.pod
90d47e
 plugin_LTLIBRARIES = nbdkit-partitioning-plugin.la
90d47e
 
90d47e
 nbdkit_partitioning_plugin_la_SOURCES = \
90d47e
-	crc32.c \
90d47e
-	crc32.h \
90d47e
+	efi-crc32.c \
90d47e
+	efi-crc32.h \
90d47e
 	partitioning.c \
90d47e
 	partition-gpt.c \
90d47e
 	partition-mbr.c \
90d47e
diff --git a/plugins/partitioning/crc32.c b/plugins/partitioning/crc32.c
90d47e
deleted file mode 100644
90d47e
index e707a50..0000000
90d47e
--- a/plugins/partitioning/crc32.c
90d47e
+++ /dev/null
90d47e
@@ -1,140 +0,0 @@
90d47e
-/* This code was taken from parted and indirectly from other sources
90d47e
- * as you can see from the messages below.  The license is compatible
90d47e
- * with the permissive license used in nbdkit.  - RWMJ 2018-09-16
90d47e
- */
90d47e
-
90d47e
-/*
90d47e
- * Dec 5, 2000 Matt Domsch <Matt_Domsch@dell.com>
90d47e
- * - Copied crc32.c from the linux/drivers/net/cipe directory.
90d47e
- * - Now pass seed as an arg
90d47e
- * - changed unsigned long to uint32_t, added #include<stdint.h>
90d47e
- * - changed len to be an unsigned long
90d47e
- * - changed crc32val to be a register
90d47e
- * - License remains unchanged!  It's still GPL-compatable!
90d47e
- */
90d47e
-
90d47e
-  /* ============================================================= */
90d47e
-  /*  COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or       */
90d47e
-  /*  code or tables extracted from it, as desired without restriction.     */
90d47e
-  /*                                                                        */
90d47e
-  /*  First, the polynomial itself and its table of feedback terms.  The    */
90d47e
-  /*  polynomial is                                                         */
90d47e
-  /*  X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0   */
90d47e
-  /*                                                                        */
90d47e
-  /*  Note that we take it "backwards" and put the highest-order term in    */
90d47e
-  /*  the lowest-order bit.  The X^32 term is "implied"; the LSB is the     */
90d47e
-  /*  X^31 term, etc.  The X^0 term (usually shown as "+1") results in      */
90d47e
-  /*  the MSB being 1.                                                      */
90d47e
-  /*                                                                        */
90d47e
-  /*  Note that the usual hardware shift register implementation, which     */
90d47e
-  /*  is what we're using (we're merely optimizing it by doing eight-bit    */
90d47e
-  /*  chunks at a time) shifts bits into the lowest-order term.  In our     */
90d47e
-  /*  implementation, that means shifting towards the right.  Why do we     */
90d47e
-  /*  do it this way?  Because the calculated CRC must be transmitted in    */
90d47e
-  /*  order from highest-order term to lowest-order term.  UARTs transmit   */
90d47e
-  /*  characters in order from LSB to MSB.  By storing the CRC this way,    */
90d47e
-  /*  we hand it to the UART in the order low-byte to high-byte; the UART   */
90d47e
-  /*  sends each low-bit to hight-bit; and the result is transmission bit   */
90d47e
-  /*  by bit from highest- to lowest-order term without requiring any bit   */
90d47e
-  /*  shuffling on our part.  Reception works similarly.                    */
90d47e
-  /*                                                                        */
90d47e
-  /*  The feedback terms table consists of 256, 32-bit entries.  Notes:     */
90d47e
-  /*                                                                        */
90d47e
-  /*      The table can be generated at runtime if desired; code to do so   */
90d47e
-  /*      is shown later.  It might not be obvious, but the feedback        */
90d47e
-  /*      terms simply represent the results of eight shift/xor opera-      */
90d47e
-  /*      tions for all combinations of data and CRC register values.       */
90d47e
-  /*                                                                        */
90d47e
-  /*      The values must be right-shifted by eight bits by the "updcrc"    */
90d47e
-  /*      logic; the shift must be unsigned (bring in zeroes).  On some     */
90d47e
-  /*      hardware you could probably optimize the shift in assembler by    */
90d47e
-  /*      using byte-swap instructions.                                     */
90d47e
-  /*      polynomial $edb88320                                              */
90d47e
-  /*                                                                        */
90d47e
-  /*  --------------------------------------------------------------------  */
90d47e
-
90d47e
-#include <config.h>
90d47e
-
90d47e
-#include <stdio.h>
90d47e
-#include <stdint.h>
90d47e
-
90d47e
-#include "crc32.h"
90d47e
-
90d47e
-static const uint32_t crc32_tab[] = {
90d47e
-      0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
90d47e
-      0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
90d47e
-      0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
90d47e
-      0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
90d47e
-      0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
90d47e
-      0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
90d47e
-      0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
90d47e
-      0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
90d47e
-      0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
90d47e
-      0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
90d47e
-      0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
90d47e
-      0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
90d47e
-      0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
90d47e
-      0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
90d47e
-      0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
90d47e
-      0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
90d47e
-      0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
90d47e
-      0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
90d47e
-      0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
90d47e
-      0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
90d47e
-      0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
90d47e
-      0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
90d47e
-      0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
90d47e
-      0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
90d47e
-      0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
90d47e
-      0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
90d47e
-      0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
90d47e
-      0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
90d47e
-      0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
90d47e
-      0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
90d47e
-      0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
90d47e
-      0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
90d47e
-      0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
90d47e
-      0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
90d47e
-      0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
90d47e
-      0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
90d47e
-      0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
90d47e
-      0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
90d47e
-      0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
90d47e
-      0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
90d47e
-      0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
90d47e
-      0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
90d47e
-      0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
90d47e
-      0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
90d47e
-      0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
90d47e
-      0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
90d47e
-      0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
90d47e
-      0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
90d47e
-      0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
90d47e
-      0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
90d47e
-      0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
90d47e
-      0x2d02ef8dL
90d47e
-   };
90d47e
-
90d47e
-/* Return a 32-bit CRC of the contents of the buffer. */
90d47e
-
90d47e
-static uint32_t
90d47e
-efi_crc32 (const void *buf, size_t len, uint32_t seed)
90d47e
-{
90d47e
-  size_t i;
90d47e
-  uint32_t crc32val;
90d47e
-  const unsigned char *s = buf;
90d47e
-
90d47e
-  crc32val = seed;
90d47e
-  for (i = 0;  i < len;  i++) {
90d47e
-    crc32val =
90d47e
-      crc32_tab[(crc32val ^ s[i]) & 0xff] ^
90d47e
-      (crc32val >> 8);
90d47e
-  }
90d47e
-  return crc32val;
90d47e
-}
90d47e
-
90d47e
-uint32_t
90d47e
-crc32 (const void *buf, size_t len)
90d47e
-{
90d47e
-  return efi_crc32 (buf, len, ~0L) ^ ~0L;
90d47e
-}
90d47e
diff --git a/plugins/partitioning/crc32.h b/plugins/partitioning/crc32.h
90d47e
deleted file mode 100644
90d47e
index 6bd5d2d..0000000
90d47e
--- a/plugins/partitioning/crc32.h
90d47e
+++ /dev/null
90d47e
@@ -1,41 +0,0 @@
90d47e
-/* nbdkit
90d47e
- * Copyright (C) 2018 Red Hat Inc.
90d47e
- * All rights reserved.
90d47e
- *
90d47e
- * Redistribution and use in source and binary forms, with or without
90d47e
- * modification, are permitted provided that the following conditions are
90d47e
- * met:
90d47e
- *
90d47e
- * * Redistributions of source code must retain the above copyright
90d47e
- * notice, this list of conditions and the following disclaimer.
90d47e
- *
90d47e
- * * Redistributions in binary form must reproduce the above copyright
90d47e
- * notice, this list of conditions and the following disclaimer in the
90d47e
- * documentation and/or other materials provided with the distribution.
90d47e
- *
90d47e
- * * Neither the name of Red Hat nor the names of its contributors may be
90d47e
- * used to endorse or promote products derived from this software without
90d47e
- * specific prior written permission.
90d47e
- *
90d47e
- * THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND
90d47e
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
90d47e
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
90d47e
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR
90d47e
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
90d47e
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
90d47e
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
90d47e
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
90d47e
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
90d47e
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
90d47e
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
90d47e
- * SUCH DAMAGE.
90d47e
- */
90d47e
-
90d47e
-#ifndef NBDKIT_CRC32_H
90d47e
-#define NBDKIT_CRC32_H
90d47e
-
90d47e
-#include <stdint.h>
90d47e
-
90d47e
-extern uint32_t crc32 (const void *buf, size_t len);
90d47e
-
90d47e
-#endif /* NBDKIT_CRC32_H */
90d47e
diff --git a/plugins/partitioning/efi-crc32.c b/plugins/partitioning/efi-crc32.c
90d47e
new file mode 100644
90d47e
index 0000000..2b080d3
90d47e
--- /dev/null
90d47e
+++ b/plugins/partitioning/efi-crc32.c
90d47e
@@ -0,0 +1,140 @@
90d47e
+/* This code was taken from parted and indirectly from other sources
90d47e
+ * as you can see from the messages below.  The license is compatible
90d47e
+ * with the permissive license used in nbdkit.  - RWMJ 2018-09-16
90d47e
+ */
90d47e
+
90d47e
+/*
90d47e
+ * Dec 5, 2000 Matt Domsch <Matt_Domsch@dell.com>
90d47e
+ * - Copied crc32.c from the linux/drivers/net/cipe directory.
90d47e
+ * - Now pass seed as an arg
90d47e
+ * - changed unsigned long to uint32_t, added #include<stdint.h>
90d47e
+ * - changed len to be an unsigned long
90d47e
+ * - changed crc32val to be a register
90d47e
+ * - License remains unchanged!  It's still GPL-compatable!
90d47e
+ */
90d47e
+
90d47e
+  /* ============================================================= */
90d47e
+  /*  COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or       */
90d47e
+  /*  code or tables extracted from it, as desired without restriction.     */
90d47e
+  /*                                                                        */
90d47e
+  /*  First, the polynomial itself and its table of feedback terms.  The    */
90d47e
+  /*  polynomial is                                                         */
90d47e
+  /*  X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0   */
90d47e
+  /*                                                                        */
90d47e
+  /*  Note that we take it "backwards" and put the highest-order term in    */
90d47e
+  /*  the lowest-order bit.  The X^32 term is "implied"; the LSB is the     */
90d47e
+  /*  X^31 term, etc.  The X^0 term (usually shown as "+1") results in      */
90d47e
+  /*  the MSB being 1.                                                      */
90d47e
+  /*                                                                        */
90d47e
+  /*  Note that the usual hardware shift register implementation, which     */
90d47e
+  /*  is what we're using (we're merely optimizing it by doing eight-bit    */
90d47e
+  /*  chunks at a time) shifts bits into the lowest-order term.  In our     */
90d47e
+  /*  implementation, that means shifting towards the right.  Why do we     */
90d47e
+  /*  do it this way?  Because the calculated CRC must be transmitted in    */
90d47e
+  /*  order from highest-order term to lowest-order term.  UARTs transmit   */
90d47e
+  /*  characters in order from LSB to MSB.  By storing the CRC this way,    */
90d47e
+  /*  we hand it to the UART in the order low-byte to high-byte; the UART   */
90d47e
+  /*  sends each low-bit to hight-bit; and the result is transmission bit   */
90d47e
+  /*  by bit from highest- to lowest-order term without requiring any bit   */
90d47e
+  /*  shuffling on our part.  Reception works similarly.                    */
90d47e
+  /*                                                                        */
90d47e
+  /*  The feedback terms table consists of 256, 32-bit entries.  Notes:     */
90d47e
+  /*                                                                        */
90d47e
+  /*      The table can be generated at runtime if desired; code to do so   */
90d47e
+  /*      is shown later.  It might not be obvious, but the feedback        */
90d47e
+  /*      terms simply represent the results of eight shift/xor opera-      */
90d47e
+  /*      tions for all combinations of data and CRC register values.       */
90d47e
+  /*                                                                        */
90d47e
+  /*      The values must be right-shifted by eight bits by the "updcrc"    */
90d47e
+  /*      logic; the shift must be unsigned (bring in zeroes).  On some     */
90d47e
+  /*      hardware you could probably optimize the shift in assembler by    */
90d47e
+  /*      using byte-swap instructions.                                     */
90d47e
+  /*      polynomial $edb88320                                              */
90d47e
+  /*                                                                        */
90d47e
+  /*  --------------------------------------------------------------------  */
90d47e
+
90d47e
+#include <config.h>
90d47e
+
90d47e
+#include <stdio.h>
90d47e
+#include <stdint.h>
90d47e
+
90d47e
+#include "efi-crc32.h"
90d47e
+
90d47e
+static const uint32_t crc32_tab[] = {
90d47e
+      0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
90d47e
+      0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
90d47e
+      0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
90d47e
+      0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
90d47e
+      0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
90d47e
+      0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
90d47e
+      0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
90d47e
+      0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
90d47e
+      0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
90d47e
+      0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
90d47e
+      0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
90d47e
+      0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
90d47e
+      0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
90d47e
+      0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
90d47e
+      0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
90d47e
+      0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
90d47e
+      0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
90d47e
+      0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
90d47e
+      0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
90d47e
+      0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
90d47e
+      0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
90d47e
+      0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
90d47e
+      0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
90d47e
+      0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
90d47e
+      0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
90d47e
+      0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
90d47e
+      0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
90d47e
+      0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
90d47e
+      0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
90d47e
+      0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
90d47e
+      0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
90d47e
+      0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
90d47e
+      0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
90d47e
+      0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
90d47e
+      0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
90d47e
+      0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
90d47e
+      0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
90d47e
+      0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
90d47e
+      0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
90d47e
+      0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
90d47e
+      0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
90d47e
+      0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
90d47e
+      0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
90d47e
+      0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
90d47e
+      0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
90d47e
+      0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
90d47e
+      0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
90d47e
+      0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
90d47e
+      0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
90d47e
+      0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
90d47e
+      0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
90d47e
+      0x2d02ef8dL
90d47e
+   };
90d47e
+
90d47e
+/* Return a 32-bit CRC of the contents of the buffer. */
90d47e
+
90d47e
+static uint32_t
90d47e
+_efi_crc32 (const void *buf, size_t len, uint32_t seed)
90d47e
+{
90d47e
+  size_t i;
90d47e
+  uint32_t crc32val;
90d47e
+  const unsigned char *s = buf;
90d47e
+
90d47e
+  crc32val = seed;
90d47e
+  for (i = 0;  i < len;  i++) {
90d47e
+    crc32val =
90d47e
+      crc32_tab[(crc32val ^ s[i]) & 0xff] ^
90d47e
+      (crc32val >> 8);
90d47e
+  }
90d47e
+  return crc32val;
90d47e
+}
90d47e
+
90d47e
+uint32_t
90d47e
+efi_crc32 (const void *buf, size_t len)
90d47e
+{
90d47e
+  return _efi_crc32 (buf, len, ~0L) ^ ~0L;
90d47e
+}
90d47e
diff --git a/plugins/partitioning/efi-crc32.h b/plugins/partitioning/efi-crc32.h
90d47e
new file mode 100644
90d47e
index 0000000..76f5a6a
90d47e
--- /dev/null
90d47e
+++ b/plugins/partitioning/efi-crc32.h
90d47e
@@ -0,0 +1,41 @@
90d47e
+/* nbdkit
90d47e
+ * Copyright (C) 2018 Red Hat Inc.
90d47e
+ * All rights reserved.
90d47e
+ *
90d47e
+ * Redistribution and use in source and binary forms, with or without
90d47e
+ * modification, are permitted provided that the following conditions are
90d47e
+ * met:
90d47e
+ *
90d47e
+ * * Redistributions of source code must retain the above copyright
90d47e
+ * notice, this list of conditions and the following disclaimer.
90d47e
+ *
90d47e
+ * * Redistributions in binary form must reproduce the above copyright
90d47e
+ * notice, this list of conditions and the following disclaimer in the
90d47e
+ * documentation and/or other materials provided with the distribution.
90d47e
+ *
90d47e
+ * * Neither the name of Red Hat nor the names of its contributors may be
90d47e
+ * used to endorse or promote products derived from this software without
90d47e
+ * specific prior written permission.
90d47e
+ *
90d47e
+ * THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND
90d47e
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
90d47e
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
90d47e
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR
90d47e
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
90d47e
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
90d47e
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
90d47e
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
90d47e
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
90d47e
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
90d47e
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
90d47e
+ * SUCH DAMAGE.
90d47e
+ */
90d47e
+
90d47e
+#ifndef NBDKIT_EFI_CRC32_H
90d47e
+#define NBDKIT_EFI_CRC32_H
90d47e
+
90d47e
+#include <stdint.h>
90d47e
+
90d47e
+extern uint32_t efi_crc32 (const void *buf, size_t len);
90d47e
+
90d47e
+#endif /* NBDKIT_EFI_CRC32_H */
90d47e
diff --git a/plugins/partitioning/partition-gpt.c b/plugins/partitioning/partition-gpt.c
90d47e
index 14a58ad..5fb7602 100644
90d47e
--- a/plugins/partitioning/partition-gpt.c
90d47e
+++ b/plugins/partitioning/partition-gpt.c
90d47e
@@ -44,7 +44,7 @@
90d47e
 
90d47e
 #include "byte-swapping.h"
90d47e
 
90d47e
-#include "crc32.h"
90d47e
+#include "efi-crc32.h"
90d47e
 #include "regions.h"
90d47e
 #include "virtual-disk.h"
90d47e
 
90d47e
@@ -121,10 +121,10 @@ create_gpt_partition_header (const void *pt, int is_primary,
90d47e
   header->nr_partition_entries = htole32 (GPT_PTA_SIZE);
90d47e
   header->size_partition_entry = htole32 (GPT_PT_ENTRY_SIZE);
90d47e
   header->crc_partitions =
90d47e
-    htole32 (crc32 (pt, GPT_PT_ENTRY_SIZE * GPT_PTA_SIZE));
90d47e
+    htole32 (efi_crc32 (pt, GPT_PT_ENTRY_SIZE * GPT_PTA_SIZE));
90d47e
 
90d47e
   /* Must be computed last. */
90d47e
-  header->crc = htole32 (crc32 (header, sizeof *header));
90d47e
+  header->crc = htole32 (efi_crc32 (header, sizeof *header));
90d47e
 }
90d47e
 
90d47e
 static void
90d47e
-- 
90d47e
1.8.3.1
90d47e