dm_verify

参考https://cloud.tencent.com/developer/article/1054088

static int verity_verify_io(struct dm_verity_io *io) { bool is_zero; struct dm_verity *v = io->v; struct bvec_iter start; unsigned b; struct crypto_wait wait; struct bio *bio = dm_bio_from_per_bio_data(io, v->ti->per_io_data_size); for (b = 0; b < io->n_blocks; b++) { int r; sector_t cur_block = io->block + b; struct ahash_request *req = verity_io_hash_req(v, io); if (v->validated_blocks && likely(test_bit(cur_block, v->validated_blocks))) { verity_bv_skip_block(v, io, &io->iter); continue; } r = verity_hash_for_block(v, io, cur_block, verity_io_want_digest(v, io), &is_zero); if (unlikely(r < 0)) return r; if (is_zero) { /* * If we expect a zero block, don't validate, just * return zeros. */ r = verity_for_bv_block(v, io, &io->iter, verity_bv_zero); if (unlikely(r < 0)) return r; continue; } r = verity_hash_init(v, req, &wait); if (unlikely(r < 0)) return r; start = io->iter; r = verity_for_io_block(v, io, &io->iter, &wait); if (unlikely(r < 0)) return r; r = verity_hash_final(v, req, verity_io_real_digest(v, io), &wait); if (unlikely(r < 0)) return r; if (likely(memcmp(verity_io_real_digest(v, io), verity_io_want_digest(v, io), v->digest_size) == 0)) { if (v->validated_blocks) set_bit(cur_block, v->validated_blocks); continue; } else if (verity_fec_decode(v, io, DM_VERITY_BLOCK_TYPE_DATA, cur_block, NULL, &start) == 0) continue; else { if (bio->bi_status) { /* * Error correction failed; Just return error */ return -EIO; } if (verity_handle_err(v, DM_VERITY_BLOCK_TYPE_DATA, cur_block)) return -EIO; } } return 0; } 这里面怎么修改
08-14
static int LoadDmDeviceTable(int fd, const char *devName, DmVerityTarget *target) { int rc; errno_t err; char *parasBuf = NULL; size_t parasTotalSize; struct dm_ioctl *io = NULL; struct dm_target_spec *ts = NULL; char *paras = NULL; FS_DM_RETURN_ERR_IF_NULL(target); FS_DM_RETURN_ERR_IF_NULL(target->paras); parasTotalSize = DM_ALIGN(sizeof(*io) + sizeof(*ts) + target->paras_len + 1); parasBuf = calloc(1, parasTotalSize); if (parasBuf == NULL) { BEGET_LOGE("error, calloc dm table fail"); return -1; } io = (struct dm_ioctl *)parasBuf; ts = (struct dm_target_spec *)(parasBuf + sizeof(*io)); paras = parasBuf + sizeof(*io) + sizeof((*ts)); do { rc = InitDmIo(io, devName); if (rc != 0) { BEGET_LOGE("error 0x%x, init dm io", rc); break; } io->data_size = parasTotalSize; io->data_start = sizeof(*io); io->target_count = 1; // io->flags |= DM_READONLY_FLAG; ts->status = 0; ts->sector_start = target->start; ts->length = target->length; err = strcpy_s(ts->target_type, sizeof(ts->target_type), "verity"); if (err != EOK) { rc = -1; BEGET_LOGE("error 0x%x, cp target type", err); break; } err = strcpy_s(paras, target->paras_len + 1, target->paras); if (err != EOK) { rc = -1; BEGET_LOGE("error 0x%x, cp target paras", err); break; } ts->next = parasTotalSize - sizeof(*io); rc = ioctl(fd, DM_TABLE_LOAD, io); if (rc != 0) { BEGET_LOGE("error 0x%x, DM_TABLE_LOAD failed for %s", rc, devName); break; } } while (0); free(parasBuf); return rc; } static int ActiveDmDevice(int fd, const char *devName) { int rc; struct dm_ioctl io; rc = InitDmIo(&io, devName); if (rc != 0) { return rc; } // io.flags |= DM_READONLY_FLAG; rc = ioctl(fd, DM_DEV_SUSPEND, &io); if (rc != 0) { BEGET_LOGE("error, DM_TABLE_SUSPEND for %s, ret=%d", devName, rc); return rc; } return 0; } 注释以后有没有什么影响
08-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值