case KVM_REG_RISCV_VECTOR_CSR_REG(vcsr):
                        *reg_addr = &cntx->vector.vcsr;
                        break;
+               case KVM_REG_RISCV_VECTOR_CSR_REG(vlenb):
+                       *reg_addr = &cntx->vector.vlenb;
+                       break;
                case KVM_REG_RISCV_VECTOR_CSR_REG(datap):
                default:
                        return -ENOENT;
        if (!riscv_isa_extension_available(isa, v))
                return -ENOENT;
 
+       if (reg_num == KVM_REG_RISCV_VECTOR_CSR_REG(vlenb)) {
+               struct kvm_cpu_context *cntx = &vcpu->arch.guest_context;
+               unsigned long reg_val;
+
+               if (copy_from_user(®_val, uaddr, reg_size))
+                       return -EFAULT;
+               if (reg_val != cntx->vector.vlenb)
+                       return -EINVAL;
+
+               return 0;
+       }
+
        rc = kvm_riscv_vcpu_vreg_addr(vcpu, reg_num, reg_size, ®_addr);
        if (rc)
                return rc;