Coverage Report

Created: 2026-02-11 06:19

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/util-linux/libblkid/src/superblocks/ubi.c
Line
Count
Source
1
/*
2
 * Copyright (C) 2017 Rafał Miłecki <rafal@milecki.pl>
3
 *
4
 * This file may be redistributed under the terms of the
5
 * GNU Lesser General Public License.
6
 */
7
#include <stdio.h>
8
#include <stdlib.h>
9
#include <unistd.h>
10
#include <string.h>
11
#include <stdint.h>
12
13
#include "superblocks.h"
14
#include "crc32.h"
15
16
struct ubi_ec_hdr {
17
  uint32_t  magic;
18
  uint8_t   version;
19
  uint8_t   padding1[3];
20
  uint64_t  ec;
21
  uint32_t  vid_hdr_offset;
22
  uint32_t  data_offset;
23
  uint32_t  image_seq;
24
  uint8_t   padding2[32];
25
  uint32_t  hdr_crc;
26
} __attribute__((packed));
27
28
static int ubi_verify_csum(blkid_probe pr, const struct ubi_ec_hdr *hdr)
29
9
{
30
9
  return blkid_probe_verify_csum(pr,
31
9
      ul_crc32(~0LL, (unsigned char *) hdr,
32
9
        sizeof(*hdr) - sizeof(hdr->hdr_crc)),
33
9
      be32_to_cpu(hdr->hdr_crc));
34
9
}
35
36
static int probe_ubi(blkid_probe pr, const struct blkid_idmag *mag)
37
9
{
38
9
  const struct ubi_ec_hdr *hdr;
39
40
9
  hdr = blkid_probe_get_sb(pr, mag, struct ubi_ec_hdr);
41
9
  if (!hdr)
42
0
    return -1;
43
44
9
  if (!ubi_verify_csum(pr, hdr))
45
9
    return -1;
46
47
0
  blkid_probe_sprintf_version(pr, "%u", hdr->version);
48
0
  blkid_probe_sprintf_uuid(pr, (unsigned char *)&hdr->image_seq, 4, "%u",
49
         be32_to_cpu(hdr->image_seq));
50
0
  return 0;
51
9
}
52
53
const struct blkid_idinfo ubi_idinfo =
54
{
55
  .name   = "ubi",
56
  .usage    = BLKID_USAGE_RAID,
57
  .probefunc  = probe_ubi,
58
  .magics   =
59
  {
60
    { .magic = "UBI#", .len = 4 },
61
    { NULL }
62
  }
63
};