cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

karma.c (1167B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 *  fs/partitions/karma.c
      4 *  Rio Karma partition info.
      5 *
      6 *  Copyright (C) 2006 Bob Copeland (me@bobcopeland.com)
      7 *  based on osf.c
      8 */
      9
     10#include "check.h"
     11#include <linux/compiler.h>
     12
     13#define KARMA_LABEL_MAGIC		0xAB56
     14
     15int karma_partition(struct parsed_partitions *state)
     16{
     17	int i;
     18	int slot = 1;
     19	Sector sect;
     20	unsigned char *data;
     21	struct disklabel {
     22		u8 d_reserved[270];
     23		struct d_partition {
     24			__le32 p_res;
     25			u8 p_fstype;
     26			u8 p_res2[3];
     27			__le32 p_offset;
     28			__le32 p_size;
     29		} d_partitions[2];
     30		u8 d_blank[208];
     31		__le16 d_magic;
     32	} __packed *label;
     33	struct d_partition *p;
     34
     35	data = read_part_sector(state, 0, &sect);
     36	if (!data)
     37		return -1;
     38
     39	label = (struct disklabel *)data;
     40	if (le16_to_cpu(label->d_magic) != KARMA_LABEL_MAGIC) {
     41		put_dev_sector(sect);
     42		return 0;
     43	}
     44
     45	p = label->d_partitions;
     46	for (i = 0 ; i < 2; i++, p++) {
     47		if (slot == state->limit)
     48			break;
     49
     50		if (p->p_fstype == 0x4d && le32_to_cpu(p->p_size)) {
     51			put_partition(state, slot, le32_to_cpu(p->p_offset),
     52				le32_to_cpu(p->p_size));
     53		}
     54		slot++;
     55	}
     56	strlcat(state->pp_buf, "\n", PAGE_SIZE);
     57	put_dev_sector(sect);
     58	return 1;
     59}
     60