{"record":{"id":"8409d2cdd22cc181","repo":"tailscale/tailscale","slug":"reading-aum","errorCode":null,"errorMessage":"reading AUM","messagePattern":"reading AUM","errorType":"http","errorClass":null,"httpStatus":400,"severity":"error","filePath":"ipn/localapi/tailnetlock.go","lineNumber":368,"sourceCode":"\t}\n\tw.Header().Set(\"Content-Type\", \"application/octet-stream\")\n\tw.Write(res.Serialize())\n}\n\nfunc (h *Handler) serveTKACosignRecoveryAUM(w http.ResponseWriter, r *http.Request) {\n\tif !h.PermitWrite {\n\t\thttp.Error(w, \"access denied\", http.StatusForbidden)\n\t\treturn\n\t}\n\tif r.Method != httpm.POST {\n\t\thttp.Error(w, \"use POST\", http.StatusMethodNotAllowed)\n\t\treturn\n\t}\n\n\tbody := io.LimitReader(r.Body, 1024*1024)\n\taumBytes, err := io.ReadAll(body)\n\tif err != nil {\n\t\thttp.Error(w, \"reading AUM\", http.StatusBadRequest)\n\t\treturn\n\t}\n\tvar aum tka.AUM\n\tif err := aum.Unserialize(aumBytes); err != nil {\n\t\thttp.Error(w, \"decoding AUM\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tres, err := h.b.TailnetLockCosignRecoveryAUM(&aum)\n\tif err != nil {\n\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\treturn\n\t}\n\tw.Header().Set(\"Content-Type\", \"application/octet-stream\")\n\tw.Write(res.Serialize())\n}\n\nfunc (h *Handler) serveTKASubmitRecoveryAUM(w http.ResponseWriter, r *http.Request) {","sourceCodeStart":350,"sourceCodeEnd":386,"githubUrl":"https://github.com/tailscale/tailscale/blob/6e0912f97994f927632b34ae9e63b53d6516a6ac/ipn/localapi/tailnetlock.go#L350-L386","documentation":"serveTKACosignRecoveryAUM reads a serialized recovery AUM from the request body (limited to 1 MiB). This 400 fires when io.ReadAll on the body fails, usually a transport error, so the AUM bytes were not received.","triggerScenarios":"Thrown at ipn/localapi/tailnetlock.go:368 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Send a complete AUM in the request body."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"6e0912f97994f927632b34ae9e63b53d6516a6ac","analyzedAt":"2026-08-18T08:17:25.280Z","contentChangedAt":"2026-08-18T08:17:25.280Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}