diff -u hal-0.5.7.1/debian/changelog hal-0.5.7.1/debian/changelog --- hal-0.5.7.1/debian/changelog +++ hal-0.5.7.1/debian/changelog @@ -1,3 +1,11 @@ +hal (0.5.7.1-0ubuntu18) edgy; urgency=low + + * debian/patches/23-fix-via-raid-detection.patch: Add extra checks to + via raid detection so that new iPod Nano's don't get detected as a + raid members. Closes: LP#66068 + + -- Soren Hansen Sat, 14 Oct 2006 11:19:35 +0200 + hal (0.5.7.1-0ubuntu17) edgy; urgency=low * Add debian/patches/00upstream-07-hald-runner_fdleak.patch: --- hal-0.5.7.1.orig/debian/patches/23-fix-via-raid-detection.patch +++ hal-0.5.7.1/debian/patches/23-fix-via-raid-detection.patch @@ -0,0 +1,51 @@ +diff -urNw hal-0.5.7.1.orig/volume_id/via_raid.c hal-0.5.7.1/volume_id/via_raid.c +--- hal-0.5.7.1.orig/volume_id/via_raid.c 2006-10-14 11:16:29.496341000 +0200 ++++ hal-0.5.7.1/volume_id/via_raid.c 2006-10-14 11:16:56.642037500 +0200 +@@ -3,6 +3,9 @@ + * + * Copyright (C) 2005 Kay Sievers + * ++ * Based on information taken from dmraid: ++ * Copyright (C) 2004-2006 Heinz Mauelshagen, Red Hat GmbH ++ * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation version 2 of the License. +@@ -31,7 +34,7 @@ + uint16_t signature; + uint8_t version_number; + struct via_array { +- uint16_t disk_bits; ++ uint16_t disk_bit_mask; + uint8_t disk_array_ex; + uint32_t capacity_low; + uint32_t capacity_high; +@@ -43,6 +46,18 @@ + + #define VIA_SIGNATURE 0xAA55 + ++/* 8 bit checksum on first 50 bytes of metadata. */ ++static uint8_t meta_checksum(struct via_meta *via) ++{ ++ uint8_t i = 50, sum = 0; ++ ++ while (i--) ++ sum += ((uint8_t*) via)[i]; ++ ++ return sum == via->checksum; ++} ++ ++ + int volume_id_probe_via_raid(struct volume_id *id, uint64_t off, uint64_t size) + { + const uint8_t *buf; +@@ -68,6 +83,9 @@ + if (via->version_number > 1) + return -1; + ++ if (!meta_checksum(via)) ++ return -1; ++ + volume_id_set_usage(id, VOLUME_ID_RAID); + snprintf(id->type_version, sizeof(id->type_version)-1, "%u", via->version_number); + id->type = "via_raid_member";