Coverage Report

Created: 2025-12-10 06:24

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/util-linux/libblkid/src/superblocks/mpool.c
Line
Count
Source
1
/*
2
 * Copyright (C) 2016 Micron Technology, Inc.
3
 *
4
 * This file may be redistributed under the terms of the
5
 * GNU Lesser General Public License.
6
 */
7
8
#include <stdio.h>
9
#include <stdlib.h>
10
#include <unistd.h>
11
#include <string.h>
12
#include <stdint.h>
13
#include "crc32c.h"
14
#include "superblocks.h"
15
16
#define MAX_MPOOL_NAME_LEN 32
17
18
struct omf_sb_descriptor {
19
  uint64_t        osb_magic;
20
  uint8_t         osb_name[MAX_MPOOL_NAME_LEN];
21
  unsigned char   osb_poolid[16]; /* UUID of pool this drive belongs to */
22
  uint16_t        osb_vers;
23
  uint32_t        osb_gen;
24
  uint32_t        osb_cksum1; /* crc32c of the preceding fields */
25
} __attribute__((packed));
26
27
static int probe_mpool(blkid_probe pr, const struct blkid_idmag *mag)
28
112
{
29
112
  const struct omf_sb_descriptor *osd;
30
112
  uint32_t sb_crc;
31
32
112
  osd = blkid_probe_get_sb(pr, mag, struct omf_sb_descriptor);
33
112
  if (!osd)
34
0
    return errno ? -errno : 1;
35
36
112
  sb_crc = crc32c(~0L, (const void *)osd,
37
112
      offsetof(struct omf_sb_descriptor, osb_cksum1));
38
112
  sb_crc ^= ~0L;
39
40
112
  if (!blkid_probe_verify_csum(pr, sb_crc, le32_to_cpu(osd->osb_cksum1)))
41
111
    return 1;
42
43
1
  blkid_probe_set_label(pr, osd->osb_name, sizeof(osd->osb_name));
44
1
  blkid_probe_set_uuid(pr, osd->osb_poolid);
45
46
1
  return 0;
47
112
}
48
49
/* "mpoolDev" in ASCII */
50
#define MPOOL_SB_MAGIC "\x6D\x70\x6f\x6f\x6c\x44\x65\x76"
51
52
const struct blkid_idinfo mpool_idinfo =
53
{
54
  .name   = "mpool",
55
  .usage    = BLKID_USAGE_FILESYSTEM,
56
  .probefunc  = probe_mpool,
57
  .magics   =
58
  {
59
    { .magic = MPOOL_SB_MAGIC, .len = 8},
60
    { NULL }
61
  }
62
};