# AIStor Memory (aimem) RELEASE.2026-10-23T23-59-20Z

Released: 2026-10-23

One AIStor Memory (aimem) CSI driver can now serve several tenants on a shared Kubernetes cluster, each with its own
token exchange endpoint and private CA, and a non-root workload can `chmod` files it did not create. `aimem bio` now
needs the agent's session key passed explicitly, and it explains a refused write.

---

## Downloads

### Binaries

| Platform | Architecture | Download                                                                                                                            |
| -------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| Linux    | amd64        | [aimem.RELEASE.2026-10-23T23-59-20Z](https://dl.min.io/aistor/aimem/release/linux-amd64/archive/aimem.RELEASE.2026-10-23T23-59-20Z) |
| Linux    | arm64        | [aimem.RELEASE.2026-10-23T23-59-20Z](https://dl.min.io/aistor/aimem/release/linux-arm64/archive/aimem.RELEASE.2026-10-23T23-59-20Z) |

The setuid `aimem-fusermount` mount helper, the `aimem-bio` binary that `aimem bio` runs, and the Kubernetes CSI node
driver are published beside it:

| Binary             | Architecture | Download                                                                                                                                                  |
| ------------------ | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `aimem-fusermount` | amd64        | [aimem-fusermount.RELEASE.2026-10-23T23-59-20Z](https://dl.min.io/aistor/aimem/release/linux-amd64/archive/aimem-fusermount.RELEASE.2026-10-23T23-59-20Z) |
| `aimem-fusermount` | arm64        | [aimem-fusermount.RELEASE.2026-10-23T23-59-20Z](https://dl.min.io/aistor/aimem/release/linux-arm64/archive/aimem-fusermount.RELEASE.2026-10-23T23-59-20Z) |
| `aimem-bio`        | amd64        | [aimem-bio.RELEASE.2026-10-23T23-59-20Z](https://dl.min.io/aistor/aimem/release/linux-amd64/archive/aimem-bio.RELEASE.2026-10-23T23-59-20Z)               |
| `aimem-bio`        | arm64        | [aimem-bio.RELEASE.2026-10-23T23-59-20Z](https://dl.min.io/aistor/aimem/release/linux-arm64/archive/aimem-bio.RELEASE.2026-10-23T23-59-20Z)               |
| `aimem-csi-driver` | amd64        | [aimem-csi-driver.RELEASE.2026-10-23T23-59-20Z](https://dl.min.io/aistor/aimem/release/linux-amd64/archive/aimem-csi-driver.RELEASE.2026-10-23T23-59-20Z) |
| `aimem-csi-driver` | arm64        | [aimem-csi-driver.RELEASE.2026-10-23T23-59-20Z](https://dl.min.io/aistor/aimem/release/linux-arm64/archive/aimem-csi-driver.RELEASE.2026-10-23T23-59-20Z) |

Each binary has `.sha256sum`, `.minisig`, and `.asc` files at the same path. These links point into `archive/`, where a
release's files stay after a newer release ships, so they always serve this build. The unversioned
`…/linux-{arch}/aimem` path serves whatever release is newest.

### Packages

`.deb`, `.rpm`, and `.apk` install the `aimem` client, the setuid `aimem-fusermount` mount helper
(`/usr/bin/aimem-fusermount`, mode 4755), and `aimem-bio`. They also install a disabled example `mnt-aimem.mount`
systemd unit and the `/sbin/mount.aimem` helper it needs.

| Format | Architecture | Download                                                                                                                                    |
| ------ | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
| DEB    | amd64        | [aimem_20261023235920.0.0_amd64.deb](https://dl.min.io/aistor/aimem/release/linux-amd64/archive/aimem_20261023235920.0.0_amd64.deb)         |
| DEB    | arm64        | [aimem_20261023235920.0.0_arm64.deb](https://dl.min.io/aistor/aimem/release/linux-arm64/archive/aimem_20261023235920.0.0_arm64.deb)         |
| RPM    | amd64        | [aimem-20261023235920.0.0-1.x86_64.rpm](https://dl.min.io/aistor/aimem/release/linux-amd64/archive/aimem-20261023235920.0.0-1.x86_64.rpm)   |
| RPM    | arm64        | [aimem-20261023235920.0.0-1.aarch64.rpm](https://dl.min.io/aistor/aimem/release/linux-arm64/archive/aimem-20261023235920.0.0-1.aarch64.rpm) |
| APK    | amd64        | [aimem_20261023235920.0.0_x86_64.apk](https://dl.min.io/aistor/aimem/release/linux-amd64/archive/aimem_20261023235920.0.0_x86_64.apk)       |
| APK    | arm64        | [aimem_20261023235920.0.0_aarch64.apk](https://dl.min.io/aistor/aimem/release/linux-arm64/archive/aimem_20261023235920.0.0_aarch64.apk)     |

The packages depend only on libc (`libc-bin` / `glibc-common`); no `libfuse` is needed.

### Container Images

```bash
# The aimem client, pinned to this release:
docker pull quay.io/minio/aistor/aimem:RELEASE.2026-10-23T23-59-20Z

# The Kubernetes CSI node driver, pinned to this release:
docker pull quay.io/minio/aistor/aimem-csi-driver:RELEASE.2026-10-23T23-59-20Z
```

The `latest` tag of each image also points at this release, but moves when the next one ships. To verify a build, pin
the release tag or a `@sha256:` digest, never `latest`.

Mounting from a container needs `/dev/fuse`. As root, it also needs `CAP_SYS_ADMIN` (or `--privileged`). As a non-root
user, the container needs `SYS_ADMIN` added to its capabilities and `allowPrivilegeEscalation: true`, so the setuid
helper can run.

### Verification

Each binary is signed with minisign (preferred) and GPG, and has a sha256sum file.

```bash
BASE=https://dl.min.io/aistor/aimem/release/linux-amd64/archive
curl -fsSLO $BASE/aimem.RELEASE.2026-10-23T23-59-20Z
curl -fsSLO $BASE/aimem.RELEASE.2026-10-23T23-59-20Z.minisig
curl -fsSLO $BASE/aimem.RELEASE.2026-10-23T23-59-20Z.sha256sum

# minisign
minisign -Vm aimem.RELEASE.2026-10-23T23-59-20Z \
  -P RWTx5Zr1tiHQLwG9keckT0c45M3AGeHD6IvimQHpyRywVWGbP1aVSGav

# sha256: the checksum file names the versioned binary, so keep that file name
sha256sum -c aimem.RELEASE.2026-10-23T23-59-20Z.sha256sum
```

The minisign public key above is the MinIO release-signing key, used across the AIStor product line.

---

## Changes since RELEASE.2026-10-21T18-29-18Z

### New Features

- **Kubernetes: one token exchange endpoint per namespace.** `--token-exchange-url` may now contain `{namespace}`,
  which the driver replaces with the namespace of the pod being mounted. One driver can then serve several tenants on a
  shared cluster, each exchanging tokens at its own endpoint. The namespace comes from kubelet, so a volume attribute
  cannot redirect the exchange. (#248)
- **Kubernetes: read the token exchange CA from the pod's namespace.** New driver options
  `--token-exchange-ca-configmap` (`AIMEM_CSI_TOKEN_EXCHANGE_CA_CONFIGMAP`) and `--token-exchange-ca-key`
  (`AIMEM_CSI_TOKEN_EXCHANGE_CA_KEY`, default `ca.crt`) read the PEM CA bundle from a ConfigMap in that namespace; a
  changed CA takes effect within five minutes. A missing or invalid ConfigMap fails mounts in that namespace only, and never falls back
  to the public roots. It cannot be combined with `--token-exchange-ca-file`. (#248)
- **Kubernetes: `uid` and `gid` volume attributes are accepted again.** They set the owner aimem shows for files that
  record none, such as objects written through S3 or by an earlier mount. A workload running as uid 1000 can now
  `chmod` those files; before, they appeared owned by the mounter (uid 65532) and `chmod` failed with `EPERM`. The
  mounter pod still runs as its own unprivileged user. `0` and non-numeric values are refused. (#248)

### Bug Fixes

#### Structured memory (`aimem bio`, experimental)

- A write that a Memory Bucket refused because it did not come from the owning agent's credential failed with a bare
  access-denied error. `aimem bio` and `aimem --bio-agent` now say which credential and namespace the write needs. (#248)

### Behaviour Changes

- **`aimem --bio-agent` now requires `--bio-session-key`** (config key `bio_session_key`), and **`aimem bio serve` now
  requires `--session-key`** (`AIMEM_BIO_SESSION_KEY`). Both used to look the key up in the agent record, but the
  agent's own credential, the only one a Memory Bucket accepts writes from, cannot read that record. A mount or
  collector started without the key now fails at startup. (#248)

### Security Updates

- **`ctutils` 0.4.5** for [RUSTSEC-2026-0385](https://rustsec.org/advisories/RUSTSEC-2026-0385.html): some
  constant-time comparisons in this cryptography dependency could branch on secret values, which can leak them through
  timing. Applies to `aimem` and `aimem-bio`; the CSI driver does not use it. (#248)

### Platform / Compatibility

- Linux amd64 and arm64, glibc 2.34 or later.
- Mounting needs `/dev/fuse`. As root, or with `CAP_SYS_ADMIN`, aimem mounts directly; any other user mounts through
  the setuid `aimem-fusermount` helper. FUSE passthrough also needs `CAP_SYS_ADMIN`; without it, a mount serves ordinary
  FUSE reads.

---

## Security & Compliance

Software bills of materials (SBOMs) for this release, generated from the `Cargo.lock` files at the release tag:

| Component          | SPDX                                                                                                                                              | CycloneDX                                                                                                                                       |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `aimem`            | [aimem-RELEASE.2026-10-23T23-59-20Z.spdx.json](https://dl.min.io/aistor/aimem/release/notes/aimem-RELEASE.2026-10-23T23-59-20Z.spdx.json)         | [aimem-RELEASE.2026-10-23T23-59-20Z.cdx.json](https://dl.min.io/aistor/aimem/release/notes/aimem-RELEASE.2026-10-23T23-59-20Z.cdx.json)         |
| `aimem-bio`        | [aimem-bio-RELEASE.2026-10-23T23-59-20Z.spdx.json](https://dl.min.io/aistor/aimem/release/notes/aimem-bio-RELEASE.2026-10-23T23-59-20Z.spdx.json) | [aimem-bio-RELEASE.2026-10-23T23-59-20Z.cdx.json](https://dl.min.io/aistor/aimem/release/notes/aimem-bio-RELEASE.2026-10-23T23-59-20Z.cdx.json) |
| `aimem-csi-driver` | [aimem-csi-RELEASE.2026-10-23T23-59-20Z.spdx.json](https://dl.min.io/aistor/aimem/release/notes/aimem-csi-RELEASE.2026-10-23T23-59-20Z.spdx.json) | [aimem-csi-RELEASE.2026-10-23T23-59-20Z.cdx.json](https://dl.min.io/aistor/aimem/release/notes/aimem-csi-RELEASE.2026-10-23T23-59-20Z.cdx.json) |

For `aimem`, also the
[crate list](https://dl.min.io/aistor/aimem/release/notes/aimem-RELEASE.2026-10-23T23-59-20Z.crates.txt) and
[dependency tree](https://dl.min.io/aistor/aimem/release/notes/aimem-RELEASE.2026-10-23T23-59-20Z.cargo-tree.txt).

---

## Upgrade Instructions

- **`aimem bio` users:** add `--bio-session-key` (or `bio_session_key:`) wherever a mount uses `--bio-agent`, and
  `--session-key` (or `AIMEM_BIO_SESSION_KEY`) to `aimem bio serve`. The value is the attribute the agent record's
  `capture_descriptors` declare for `session_id`. Run both under the agent's own credential.
- **Kubernetes:** pin both image references in the DaemonSet to
  `quay.io/minio/aistor/aimem-csi-driver:RELEASE.2026-10-23T23-59-20Z`. Existing settings keep working. To use a token
  exchange per namespace:
  - Put `{namespace}` in `--token-exchange-url`, and set `--token-exchange-ca-configmap` if the endpoints use a private
    CA. Create that ConfigMap in every namespace whose pods mount a volume.
  - Apply this release's `rbac.yaml`. Its new `aimem-csi-node-exchange-ca` ClusterRole lets the driver read one
    ConfigMap name in every namespace; change its `resourceNames` to the name you pass to
    `--token-exchange-ca-configmap`.
  - Keep `podInfoOnMount: true` in the `CSIDriver` (the shipped `csidriver.yaml` sets it). The driver picks the endpoint
    from the pod namespace it reports.
- **Non-root workloads that `chmod` files they did not create:** set the `uid` and `gid` volume attributes to the
  workload's user and group.

## Documentation

- Hosted docs: <https://docs.min.io/aimem/>

## Support

- Security disclosures: security@min.io
- Licensed customers and contributors: contact MinIO support.
