Skip to content

[8.0] Resolve query logger from QueryContext in shaper generation (#36758)#36779

Merged
roji merged 1 commit intodotnet:release/8.0-stagingfrom
roji:JsonLeak8
Sep 15, 2025
Merged

[8.0] Resolve query logger from QueryContext in shaper generation (#36758)#36779
roji merged 1 commit intodotnet:release/8.0-stagingfrom
roji:JsonLeak8

Conversation

@roji
Copy link
Member

@roji roji commented Sep 14, 2025

Instead of closing over the current scoped logger, causing a leak.

Closes #36464, backports #36758 to 8.0

Description
When generating the shaper (code which reads back results from the database), the current logic wrongly captures the current query logger (which is a scoped service); this means that whatever logger is in use when the query is first compiled gets referenced from the shaper, and stored in our singleton query cache potentially forever (or until evicted). The logger has references ultimately leading to the EF change tracker and through it, meaning that these user objects are kept alive forever (a form of leak).

Customer impact
With specific usage, arbitrary large user objects may be kept alive forever, and never garbage-collected. In addition, the wrong query logger instance may get used (the one from when the query was first compiled, instead of the current one for the query being executed), which could lead to incorrect logging.

We have performed patch servicing for this kind of bug before (because of the leak potential).

How found
Customer report

Regression
Yes, from EF 7 to EF 8; introduced in #31100.

Testing
This is unfortunately difficult/possible to test automatically, as it's about an unwanted reference in the shaper keeping objects alive. Tested manually to ensure that the shaper no longer contains the reference.

Risk
Low. The change is simple, and we have ample code coverage for the affected codepaths; quirk added.

…6758)

Instead of closing over the current scoped logger, causing a leak.

Closes dotnet#36464

(cherry picked from commit b7996be)
@roji roji requested a review from a team September 14, 2025 07:43
@roji roji merged commit d574040 into dotnet:release/8.0-staging Sep 15, 2025
7 checks passed
@roji roji deleted the JsonLeak8 branch September 15, 2025 07:06
This was referenced Oct 14, 2025
This was referenced Feb 20, 2026
renebentes pushed a commit to renebentes/3054 that referenced this pull request Feb 25, 2026
…#118)

Updated
[Microsoft.EntityFrameworkCore.Design](https://github.com/dotnet/efcore)
from 9.0.7 to 9.0.13.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.EntityFrameworkCore.Design's
releases](https://github.com/dotnet/efcore/releases)._

## 9.0.13

[Release](https://github.com/dotnet/core/releases/tag/v9.0.13)

## What's Changed
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#37369
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#37375
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#37422
* Update branding to 8.0.24 by @​vseanreesermsft in
dotnet/efcore#37448
* Update branding to 9.0.13 by @​vseanreesermsft in
dotnet/efcore#37449
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#37452
* [release/8.0] Disable Analyzer tests by @​AndriySvyryd in
dotnet/efcore#37467
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#37468
* [release/8.0] Fix binskim prereleaseVersion formatting in pipeline
config by @​AndriySvyryd in dotnet/efcore#37475
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#37490
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/efcore#37503
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/efcore#37502
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#37504


**Full Changelog**:
dotnet/efcore@v9.0.12...v9.0.13

## 9.0.12

[Release](https://github.com/dotnet/core/releases/tag/v9.0.12)

## What's Changed
* [release/8.0-staging] Merge release/8.0 to release/8.0-staging by
@​cincuranet in dotnet/efcore#36948
* [release/9.0-staging] Merge release/9.0 to release/9.0-staging by
@​cincuranet in dotnet/efcore#36949
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36980
* [release/9.0] Update Microsoft.Build.* versions by @​AndriySvyryd in
dotnet/efcore#37004
* [release/9.0] Merge release/9.0-staging to release/9.0 by
@​AndriySvyryd in dotnet/efcore#37041
* [release/8.0] Update dependencies by @​AndriySvyryd in
dotnet/efcore#37048
* Update branding to 8.0.23 by @​vseanreesermsft in
dotnet/efcore#37074
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#37080
* [automated] Merge branch 'release/8.0-staging' => 'release/8.0' by
@​AndriySvyryd in dotnet/efcore#37079
* Update branding to 9.0.12 by @​vseanreesermsft in
dotnet/efcore#37075
* [release/9.0-staging] Fix 0-byte reads/writes on blobs by @​cincuranet
in dotnet/efcore#37068
* [release/8.0-staging] Fix 0-byte reads/writes on blobs by @​cincuranet
in dotnet/efcore#37067
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#37088
* [release/8.0] Update BinSkim to 4.3.1 by @​AndriySvyryd in
dotnet/efcore#37091
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#37116
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/efcore#37130
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/efcore#37129
* [release/8.0] Change NuGet audit to moderate by @​AndriySvyryd in
dotnet/efcore#37138
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#37135
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#37160
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#37161
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#37163
* [release/9.0-staging] Handle .NET 10 MemoryExtensions.Contains
overload with comparer by @​roji in
dotnet/efcore#37183
* [release/8.0-staging] Handle .NET 10 MemoryExtensions.Contains
overload with comparer by @​roji in
dotnet/efcore#37182
* [release/8.0-staging] Update to Mac 15 queues. by @​cincuranet in
dotnet/efcore#37097
* [release/9.0-staging] Update to Mac 15 queues. by @​cincuranet in
dotnet/efcore#37098
* Merge release/8.0-staging to release/8.0 by @​AndriySvyryd in
dotnet/efcore#37305
* [release/9.0] Fix snapshot generation to capture column type for JSON
columns by @​Copilot in dotnet/efcore#37294
* Merge release/9.0-staging to release/9.0 by @​AndriySvyryd in
dotnet/efcore#37306
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#37315
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#37307


**Full Changelog**:
dotnet/efcore@v9.0.11...v9.0.12

## 9.0.11

[Release](https://github.com/dotnet/core/releases/tag/v9.0.11)

## What's Changed
* [release/9.0-staging] Merge release/9.0 to release/9.0-staging by
@​cincuranet in dotnet/efcore#36800
* [release/8.0-staging] Merge release/8.0 to release/8.0-staging by
@​cincuranet in dotnet/efcore#36798
* [release/9.0-staging] Fix performance degradation in converters
because the instance was not reused by @​cincuranet in
dotnet/efcore#36897
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36915
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36916
* Update branding to 9.0.11 by @​vseanreesermsft in
dotnet/efcore#36925
* Update branding to 8.0.22 by @​vseanreesermsft in
dotnet/efcore#36924
* [release/8.0] Merge release/8.0-staging to release/8.0 by @​cincuranet
in dotnet/efcore#36943
* [release/9.0] Merge release/9.0-staging to release/9.0 by @​cincuranet
in dotnet/efcore#36944
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#36939
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/efcore#36968
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/efcore#36969
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#36973
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36981


**Full Changelog**:
dotnet/efcore@v9.0.10...v9.0.11

## 9.0.10

[Release](https://github.com/dotnet/core/releases/tag/v9.0.10)

## What's Changed
* [release/8.0-staging] Merge release/8.0 to release/8.0-staging by
@​cincuranet in dotnet/efcore#36540
* [release/9.0-staging] Merge release/9.0 to release/9.0-staging by
@​cincuranet in dotnet/efcore#36541
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36690
* Update branding to 9.0.10 by @​vseanreesermsft in
dotnet/efcore#36697
* Update branding to 8.0.21 by @​vseanreesermsft in
dotnet/efcore#36696
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#36699
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/efcore#36727
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/efcore#36728
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#36734
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36753
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36765
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36782
* [release/8.0] Disable Guardian Dotnet Analyzers by @​AndriySvyryd in
dotnet/efcore#36776
* [release/9.0] Disable Guardian Dotnet Analyzers by @​AndriySvyryd in
dotnet/efcore#36777
* [8.0] Resolve query logger from QueryContext in shaper generation
(#​36758) by @​roji in dotnet/efcore#36779
* [9.0] Resolve query logger from QueryContext in shaper generation
(#​36758) by @​roji in dotnet/efcore#36778
* [release/8.0] Merge release/8.0-staging to release/8.0 by @​cincuranet
in dotnet/efcore#36788
* [release/9.0] Merge release/9.0-staging to release/9.0 by @​cincuranet
in dotnet/efcore#36789
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#36784
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36833
* [release/8.0] Remove OSX.13.ARM64 from HelixTargetQueues by
@​AndriySvyryd in dotnet/efcore#36838
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#36841
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36852
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36853
* [release/8.0] Remove OSX.13.Amd64 target from HelixTargetQueues by
@​AndriySvyryd in dotnet/efcore#36855
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#36860
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36867


**Full Changelog**:
dotnet/efcore@v9.0.9...v9.0.10

## 9.0.9

[Release](https://github.com/dotnet/core/releases/tag/v9.0.9)

## What's Changed
* [release/8.0] Merge release/8.0 => release/8.0-staging by @​cincuranet
in dotnet/efcore#36197
* [release/9.0] Merge release/9.0 => release/9.0-staging by @​cincuranet
in dotnet/efcore#36201
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36398
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36495
* Update branding to 9.0.9 by @​vseanreesermsft in
dotnet/efcore#36498
* Update branding to 8.0.20 by @​vseanreesermsft in
dotnet/efcore#36497
* [release/9.0] Dispose related readers in
GroupBySplitQueryingEnumerable (#​36484) by @​roji in
dotnet/efcore#36490
* [release/8.0] Dispose related readers in
GroupBySplitQueryingEnumerable (#​36484) by @​roji in
dotnet/efcore#36489
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#36500
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/efcore#36512
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/efcore#36511
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#36514
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36533
* [release/8.0] Merge release/8.0-staging to release/8.0 by @​cincuranet
in dotnet/efcore#36531
* [release/9.0] Merge release/9.0-staging to release/9.0 by @​cincuranet
in dotnet/efcore#36532
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36534
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#36537
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#36592


**Full Changelog**:
dotnet/efcore@v9.0.8...v9.0.9

Commits viewable in [compare
view](dotnet/efcore@v9.0.7...v9.0.13).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Microsoft.EntityFrameworkCore.Design&package-manager=nuget&previous-version=9.0.7&new-version=9.0.13)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants